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

C/C++ 关于unsigned char 的十六进制赋值输入输出的有关问题

2012-05-20 
【求助】C/C++ 关于unsigned char 的十六进制赋值输入输出的问题#includeiostreamusing namespace stdint

【求助】C/C++ 关于unsigned char 的十六进制赋值输入输出的问题
#include<iostream>
using namespace std;
int main()
{
int i;
unsigned char *butter = new unsigned char[65];
for(i=1;i<=64;i++)
{

butter[i]=0xff;
}

for(i=1;i<=64;i++)
{
printf("%.2x ",butter[i]);
  if(i%4==0)cout<<" ";
if(i%16==0)cout<<endl; 
}
cout<<"输入四个十六进制的数,每输入一个按回车结束,例: A1 回车"<<endl; 
for(i=1;i<=4;i++)
{
  scanf("%x",&butter[i]);

}
cout<<endl<<endl;

for(i=1;i<=64;i++)
{
printf("%.2x ",butter[i]);
  if(i%4==0)cout<<" ";
if(i%16==0)cout<<endl; 
}
cout<<endl; 
cout<<"不知道为什么会出现第一行的第二大列的数值前面几个变成零了。"<<endl;
cout<<"有没有解决的方法啊?最好C和C++的方法分别列出来,谢谢"<<endl; 
}


[解决办法]
直接scanf的"%x"得到的数据位数要长于unsigned char,所以后面的存储单元被覆盖了,通过一个变量自动截断即可~

C/C++ code
#include<iostream>using namespace std;int main(){int i;unsigned int uc;unsigned char *butter = new unsigned char[65];for(i=1;i<=64;i++){ butter[i]=0xff;}for(i=1;i<=64;i++){ printf("%.2x ",butter[i]);   if(i%4==0)cout<<" "; if(i%16==0)cout<<endl;  }cout<<"输入四个十六进制的数,每输入一个按回车结束,例: A1 回车"<<endl;  for(i=1;i<=4;i++){   scanf("%x",&uc);   butter[i] = uc;}cout<<endl<<endl;for(i=1;i<=64;i++){ printf("%.2x ",butter[i]);   if(i%4==0)cout<<" "; if(i%16==0)cout<<endl;  }cout<<endl;  cout<<"不知道为什么会出现第一行的第二大列的数值前面几个变成零了。"<<endl;cout<<"有没有解决的方法啊?最好C和C++的方法分别列出来,谢谢"<<endl;  }
[解决办法]
同意楼上。格式符”%%x“意味着,后面的变量为整型变量的地址(4字节),在执行完scanf后,其地址执行的4个字节将被改写。引入一个整型的中间变量即可。


C/C++ code
for(i=1;i<=4;i++){  scanf("%x",&butter[i]);} 

热点排行