数据反转 LSB - MSB MSB-LSB (InvertUint8InvertUint16InvertUint32 )

mac2024-05-06  21

以下总结两种方式实现数据的反转,包含 InvertUint8  InvertUint16  InvertUint32

源码地址为 :https://download.csdn.net/download/wzy15965343032/11946002

 

#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include "crc_about.h" //#define ulong char int main() { unsigned char data1[2] = { 0x12, 0x21 }; unsigned char data2[2]; printf(" hello - gowinsemi \r\n"); InvertUint8(data2,data1); printf("InvertUint8 \r\n %02x %02x -> %02x %02x \r\n ", data1[0], data1[1], data2[0], data2[1]); printf("ReverseBits \r\n %02x -> %02x \r\n ", data1[0], ReverseBits(data1[0])); printf("ReverseBits_n\r\n %02x -> %02x \r\n ", data1[0], ReverseBits_n(data1[0], 8)); getchar(); return 1; } //第一种写法 void InvertUint8(unsigned char *dBuf, unsigned char *srcBuf) { int i; unsigned char tmp[4]; tmp[0] = 0; for (i = 0; i< 8; i++) { if (srcBuf[0] & (1 << i)) tmp[0] |= 1 << (7 - i); } dBuf[0] = tmp[0]; } void InvertUint16(unsigned short *dBuf, unsigned short *srcBuf) { int i; unsigned short tmp[4]; tmp[0] = 0; for (i = 0; i< 16; i++) { if (srcBuf[0] & (1 << i)) tmp[0] |= 1 << (15 - i); } dBuf[0] = tmp[0]; } void InvertUint32(unsigned int *dBuf, unsigned int *srcBuf) { int i; unsigned int tmp[4]; tmp[0] = 0; for (i = 0; i< 32; i++) { if (srcBuf[0] & (1 << i)) tmp[0] |= 1 << (15 - i); } dBuf[0] = tmp[0]; } //第二种写法 static char ReverseBits(char b) { char newValue = 0; for (int i = 7; i >= 0; i--) { newValue |= (char)((b & 1) << i); b >>= 1; } return newValue; } ulong ReverseBits_n(ulong ul, int valueLength) { ulong newValue = 0; for (int i = valueLength - 1; i >= 0; i--) { newValue |= (ul & 1) << i; ul >>= 1; } return newValue; }

 

crc_about.h 如下

 

#define ulong char void InvertUint8(unsigned char *dBuf, unsigned char *srcBuf); void InvertUint16(unsigned short *dBuf, unsigned short *srcBuf); void InvertUint32(unsigned int *dBuf, unsigned int *srcBuf); char ReverseBits(char b); ulong ReverseBits_n(ulong ul, int valueLength);

 

 

结果:

 

最新回复(0)