• 数据反转 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);
    

    结果:

  • 相关阅读:
    bootstrap-table 切换页码保留勾选的checkbox
    vsftp服务器同步文件
    MySQL5.7 主从复制配置
    VMware NAT模式下设置网络
    在Jsp中调用静态资源,路径配置问题,jsp获取路径的一些方法
    centos7.3安装配置vsftp
    Linux安装配置Nginx
    jsp登录页面,展示错误信息,刷新页面后错误依然存在解决方案
    linux中使用Jmeter压测总结
    常规测试方法
  • 原文地址:https://www.cnblogs.com/sggggr/p/12397038.html
Copyright © 2020-2023  润新知