c++(memcpy)数据转换后,有乱码?
#include <string.h>
void main()
{
long a=0x3d9c0ebf; // 用十六进制整型 表示的浮点数值为 0.0762
char d[5];
memcpy(d,(char *)&a,4);// 转换成字符串 拷贝到数组d
d[4]='\0' ; //设定 结束字符
for(int i=0;i<4;i++)
printf("%02x\",d[i]); //输出 4个
}
------------------------------------------
输出结果为:ffffffbf 0e ffffff9c 3d
问题 1:我明明已经限定字符串的长度,为什么d[0]、d[2] 还出现乱码???
问题 2:倒序怎么产生的?
[解决办法]
printf("%02x\", (unsigned char)d[i]); //输出 4个
[解决办法]
那要看 char 是 unsigned char 还是 signed char 这个不同编译器也是有不同,大多是 signed char。
若此,则 d[i] 超出 [0,255] 的范围,则认为是负数了,自动扩展到 int 也是 负数 了。
[解决办法]
1、bf和9c已经超过[0,128]的范围,并且用%i输出时,已经强转为int类型了,而不是char类型了。
2、反序是因为大端字节序和小端字节序的问题。windows下用的是小端字节序,所以看起是反序的