首页 > 其他 > 详细

数据反转 LSB - MSB MSB-LSB (InvertUint8 InvertUint16 InvertUint32 )

时间:2020-03-02 19:00:08      阅读:106      评论:0      收藏:0      [点我收藏+]

以下总结两种方式实现数据的反转,包含 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!