在程式開發過程中,我們經常會用到按位拷貝一串二進位制數,在此提供乙個按位拷貝的函式給大家參考,函式原始碼如下:
1測試**:#define char_t char
2#define uint8_t unsigned char
3#define int8_t signed char
4#define uint16_t unsigned short
5#define int16_t signed short
6#define uint32_t unsigned long int
7#define int32_t signed long int 89
/*10
* param[in] srcdata: source data
11* param[in] startsrcbit: start source bit(1, 2, 3, ...)
12* param[in] startdstbit: start destination bit(1, 2, 3, ...)
13* param[in] copylen: copy length
14* param[out] dstdata: destination data
15*/
16void copy_data_by_bits(uint8_t *dstdata, uint32_t startdstbit, uint8_t *srcdata, uint32_t startsrcbit, uint32_t copylen)
17
2829
while (datalen > 0
)
3940
if (0 ==copydstbitofbyte)
4445 dstdata[copydstbyte] &= ~(1
<< (copydstbitofbyte - 1
));
46if ((srcdata[copysrcbyte] & ((uint8_t)((uint8_t)1
<< (copysrcbitofbyte - 1)))) != 0
)
49 datalen--;
50}
51 }
1分析如下:int main(void
)
2;
4 uint32_t startsrcbit = 3
; 5 uint32_t copylen = 8
; 6 uint8_t dstdata[2] = ;
7 uint32_t startdstbit = 8
; 8
9 dstdata[0] = 0xab
; 10
copy_data_by_bits(dstdata, startdstbit, srcdata, startsrcbit, copylen);
11 printf("
dstdata[0]:%#04x dstdata[1]:%#04x\n
", dstdata[0], dstdata[1
]);
1213
return
0;
14 }
C語言實現按位倒序
最近遇到了乙個程式設計問題,怎樣使得乙個位元組的資料實現按位倒序?舉例 0xe1按位倒序的話就是0x87,0x81按位倒序還是0x81 說明 最高位變成最低位,次高位變成次低位。依次類推,現在用指標來實現,如下 include struct group union fit intmain int a...
C語言按位與 按位或 按位異或 按位取反 (一)
與運算 兩者都為1為1,否則為0 1 1 1,1 0 0,0 1 0,0 0 0 或運算 兩者都為0為0,否則為1 1 1 1,1 0 1,0 1 1,0 0 0 非運算 1取0,0取1 1 0,0 1 10001 01110 異或運算 兩者相等為0,不等為1 1 1 0,1 0 1,0 1 1,0...
C語言按位與 按位或 按位異或 按位取反(二)
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的...