zoukankan      html  css  js  c++  java
  • 数据反转 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);
    

    结果:

  • 相关阅读:
    Redis线程模型理解
    策略模式
    Spring Cloud 5大组件介绍
    单例模式
    hotspot虚拟机的调试
    编译虚拟机jvm——openjdk的编译
    mybatis的搭建和注入spring的方式
    springMvc+hibernate的web application的构建
    关于本博客
    本博客已停更
  • 原文地址:https://www.cnblogs.com/sggggr/p/12397038.html
Copyright © 2011-2022 走看看