C++里怎么把字节倒叙过来显示

来源:百度知道 编辑:UC知道 时间:2024/04/29 07:55:25
毕设中,大侠们帮帮忙好吗~~~

比如我的buffer里读入的数据是00h.00h.00h.01h
但是显示出来的值却是16777216(01000000h)的值
我想让显示的值还是1(00000001h)

请问有什么比较简洁的方法么,比如建一个函数来实现逐字节的倒叙,除了处理4BYTE还可以处理多个BYTE的,比如8BYTE,16BYTE的,谢谢大家咯~~~

我还会追加分的哦,大家帮帮我好不好
我定义了很多种类型的数据,有WORD DWORD,还有char Xxx[8], char Yyy[16]这样的8个Byte,或者16个Byte的,那么char Xxx[8], char Yyy[16]这两种也可以用你给出的方法来做么??

谢谢啦,帮我回答下,再给你10分哈~~~

你的buffer是从哪读的数据?文件中?那样的话,你就应该是以long型变量来读取啊,你如果1个字节1个字节的读肯定是反的。因为常见计算机的字节顺序是little endian的,低位数据在低位地址。

如果你必须是以字节为单位来读数据的话,只有自己手动倒置了。正常情况下,只会出现2字节和4字节的情况。写两个函数就行了。
void swap2(unsigned short &a)
{
char x=(char)a;
a=(a>>8 |(x<<8));
}
void swap4(unsigned long &a)
{
char x=(char)a;
char y=(char)(a>>8);
char z=(char)(a>>16);
a=(a>>24) | (z<<8)|(y<<16)|(x<<24);
}

这是格式转换存贮的问题,
intel 格式:
motorola 格式:

可以写一个函数进行交换。

int intel_motorola_chg(char *s,char *d,int len)
{
int i;

for(i=0;i<len;i++)
d[i]=s[len-i-1];
return 1;
}

用法:
例:
char *buffer ="\x00\x00\x00\x01";
int i=0;
intel_motorola_chg(buffer,(unsigned char *)&i,4);

这时候i的值就是1