首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++(memcpy)数据转换后,有乱码?解决方法

2012-06-02 
c++(memcpy)数据转换后,有乱码?#include string.hvoid main(){longa0x3d9c0ebf//用十六进制整型 表示

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下用的是小端字节序,所以看起是反序的

热点排行