C語言實現按位拷貝

2022-06-28 11:30:12 字數 1784 閱讀 5082

在程式開發過程中,我們經常會用到按位拷貝一串二進位制數,在此提供乙個按位拷貝的函式給大家參考,函式原始碼如下:

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,則該位的...