我又一个char型数组,想转为十六进制
比如unsigned char data[4]={44,55,66,77};现在我想得到的是
a=data[0];
b=data[1];
c=data[2];
d=data[3];
通过上面 得到的是
a=44;
b=55;
c=66;
d=77;
而我想要得到的是
a=0x44;
b=0x55;
c=0x66;
d=0x77;
因为我的char型数组比较庞大,有什么比较简便的方法吗?
比如unsigned char data[4]={44,55,66,77};现在我想得到的是
a=data[0];
b=data[1];
c=data[2];
d=data[3];
通过上面 得到的是
a=44;
b=55;
c=66;
d=77;
而我想要得到的是
a=0x44;
b=0x55;
c=0x66;
d=0x77;
因为我的char型数组比较庞大,有什么比较简便的方法吗?
解决方案 »
- 请问如何实现当窗口大小发生改变的时候,窗口上的控件的位置相对改变?保持X/Y相对位置?请各位指点一下。
- CSocket对象可以把其指针作为参数传给线程函数,在线程函数中使用该指针来收发数据吗?
- 纯win32的程序,如何对文件进行操作,该使用什么api呢?
- 怎样在对话框程序开始运行时,不要资源编辑器设置时窗体的大小,重新设置的窗体大小????
- 问一个写文件的问题
- 重载的OnIdle要动鼠标才执行是为什么?
- 急问:如何根据process id 来得到 这个程序的主窗口指针???
- 关于多视图的打印问题,困扰了我好几天了,请各位指教!
- 那些字符在文本文件中不会出现,系统也不会使用?
- 请问,VC中如何调用oracle中的存储过程
- Richedit2 添加其他控件的问题(非图片或者文字)
- 为了在没有MSDatGrd.OCX的系统运行,DataGrid控件能否和主程序一同打包发布?
unsigned char data[] = {44,55,66,77};
vector<int> vec;
CString str(_T(""));
for(int i=0; i<sizeof(data)/sizeof(data[0]); i++)
{
str.Format(_T("0x%d"), data[i]);
vec.push_back(_tcstoul(str, NULL, 16));
}
char ch[32]={0}; unsigned char a,b,c,d;
sprintf(ch,"%x",data[0]);
sscanf(ch,"%x",&a);
sprintf(ch,"%x",data[1]);
sscanf(ch,"%x",&b); sprintf(ch,"%x",data[2]);
sscanf(ch,"%x",&c); sprintf(ch,"%x",data[3]);
sscanf(ch,"%x",&d);
char ch[32]={0}; for(int i=0;i<4;i++)
{
sprintf(ch,"%x",data[i]);
sscanf(ch,"%x",&data[i]);
}好了,data数组自己转自己,全搞定了
unsigned char data[4]={44,55,66,77};
char ch[32]={0};
unsigned char c;
for(int i=0;i<4;i++)
{
memset(ch,0,32);
sprintf(ch,"%d",data[i]); //这个要用%d
sscanf(ch,"%2x",&c);
data[i]=c;
}
char D2H(char a)
{
a=a%100; //禁止百位
char b=a/10;
b<<=4;
b |= a%10;
return b;
}可以用下边的测试一下
char c[] = {23,34,45,56,67,1,2,3,4,105};
for(int i=0; i<10; i++)
{
c[i] = D2H(c[i]);
}
还有这样的数据,每个数字都只有两位数
char data[]={11,f4,2e,ff.......}
有没有什么方法 能直接在每个数字前面加上‘0X’,就像这样
a=0x11;
b=0xF4;
c=0x2E;
d=0xFF;
还有这样的数据,每个数字都只有两位数
char data[]={11,f4,2e,ff.......}
有没有什么方法 能直接在每个数字前面加上‘0X’,就像这样
a=0x11;
b=0xF4;
c=0x2E;
d=0xFF;
从F4到0xF4......
你不用转换
真的
我觉得你误会了
你这些数据直接用就行了
另外F4不是字符串,是数