數據反轉 LSB - MSB MSB-LSB (InvertUint8 InvertUint16 InvertUint32 )

以下總結兩種方式實現數據的反轉,包含 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);

 

 

結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章