以下总结两种方式实现数据的反转,包含 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);
结果:
数据反转 LSB - MSB MSB-LSB (InvertUint8 InvertUint16 InvertUint32 )
原文:https://www.cnblogs.com/sggggr/p/12397038.html