数据反转 LSB

以下总结两种方式实现数据的反转,包含 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 
");
 
    InvertUint8(data2,data1);
 
    printf("InvertUint8 
  %02x  %02x -> %02x %02x 
 ", data1[0], data1[1], data2[0], data2[1]);
 
    printf("ReverseBits 
  %02x ->  %02x 
 ", data1[0], ReverseBits(data1[0]));
 
    printf("ReverseBits_n
 %02x ->  %02x 
 ", 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);

结果:

原文地址:https://www.cnblogs.com/sggggr/p/12397038.html