在MFC中如何实现十进制数或字符转换为十六进制(unsigned char型)? 用mfc编程遇到问题,需要将得到的十进制数(或字符形式十进制数)转换为十六进制,要求十六进制数为unsigned char型,目的是将转换后的数赋值给CByteArray数组指定的索引值里面。请教高手如何实现,或者有没有好的建议。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你是转换成十六进制的字符串的话可以使用CString str;str.Format("%x",14); unsigned char x = atoi( "1234" ); 不是字符串,转换为字符串的我会。十六进制字符串类型再赋值给CbyteArray的对象如:CByteArray a; a.SetAt(5,m); //这里m要求unsigned char 类型。 我需要解决的是:1,十进制数(int型)转换为unsigned char型 或者 2,十进制或十六进制字符串转换为unsigned char型 如何实现?解决上面任何一个都可以。 如果字符串是"abcd”这语句也可以么? 转换成十六进制的字符串的话问题还没解决,接下来需要将十六进制的字符串转化为unsigned char型(目的是将转换后的数赋值给CByteArray数组指定的索引值里面),这一步如何实现呢? 这个问题的思维不要复杂了,char是不存在任何进制的一个字符型数字 ‘a’ 存入unsigned char中,等价于存储了对应的asc码'a' 也可以等价于一个int 类型一般的表达式 int b='a' 是没有任何问题的所谓的16进制存入unsigned char 就是一个int类型存入unsigned char的问题等价于unsigned char a=38假设你的16进制数 为0a,也就等价于十进制的10unsigned char a=10 就可以把这oa的十六进制数存如char 中了当然,另一种情况是你的16进制数本身是以字符形式存在的如char* a=“0a”;那就写函数了如下:int func(const char* str,unsigned char* digit16) { int i, len; int hi, lo; if(str==NULL||digit16==NULL) return -1; if((len = strlen(str))%2 ==1) return -2; for(i=0;i<len;i++) if(!((str[i]>= '0'&&str[i]<='9')|| (str[i]>='A'&&str[i]<='F')|| (str[i]>='a'&&str[i]<='f'))) return -3; for(i =0;i<len/2;i++) { if(str[i*2]>='0'&&str[i*2]<='9') hi=str[i*2]-'0'; else if(str[i*2]>='a'&&str[i*2]<='f') hi=str[i*2]-'a'+10; else hi=str[i*2] -'A'+10; if(str[i*2+1]>='0'&& str[i* 2+1]<= '9') lo=str[i*2+1]-'0'; else if(str[i*2+1]>='a'&&str[i*2+1]<='f') lo=str[i*2+1]-'a'+10; else lo=str[i*2+1]-'A'+10; digit16[i]=hi*16+lo; } return i; /*length of the number*/ } 去国内企业还是外企?外企待遇高点。。。。 通用升级安装包的制作工具---打包问题 请高手帮帮忙 对话框显示问题 怎样用键盘控制列表框? 老话题, 又是error LNK2005问题??? 高分求教文本显示问题!! 关于读写文件的编码 偶就象小猫一样可怜滴~~ 急问:类似于word中插入里的文本框是怎么做出来的? 请教高手关于字号(磅值)跟毫米之间的关系 关于mscomm的SetSetting() 有raw数据,怎么生成Cximage类对象
可以使用
CString str;
str.Format("%x",14);
如:CByteArray a;
a.SetAt(5,m); //这里m要求unsigned char 类型。 我需要解决的是:1,十进制数(int型)转换为unsigned char型
或者 2,十进制或十六进制字符串转换为unsigned char型
如何实现?解决上面任何一个都可以。
如果字符串是"abcd”这语句也可以么?
转换成十六进制的字符串的话问题还没解决,接下来需要将十六进制的字符串转化为unsigned char型(目的是将转换后的数赋值给CByteArray数组指定的索引值里面),这一步如何实现呢?
'a' 也可以等价于一个int 类型
一般的表达式 int b='a' 是没有任何问题的所谓的16进制存入unsigned char 就是一个int类型存入unsigned char的问题
等价于unsigned char a=38假设你的16进制数 为0a,也就等价于十进制的10
unsigned char a=10 就可以把这oa的十六进制数存如char 中了当然,另一种情况是你的16进制数本身是以字符形式存在的如
char* a=“0a”;
那就写函数了如下:int func(const char* str,unsigned char* digit16)
{
int i, len;
int hi, lo;
if(str==NULL||digit16==NULL)
return -1;
if((len = strlen(str))%2 ==1)
return -2;
for(i=0;i<len;i++)
if(!((str[i]>= '0'&&str[i]<='9')||
(str[i]>='A'&&str[i]<='F')||
(str[i]>='a'&&str[i]<='f')))
return -3;
for(i =0;i<len/2;i++)
{
if(str[i*2]>='0'&&str[i*2]<='9')
hi=str[i*2]-'0';
else if(str[i*2]>='a'&&str[i*2]<='f')
hi=str[i*2]-'a'+10;
else
hi=str[i*2] -'A'+10;
if(str[i*2+1]>='0'&& str[i* 2+1]<= '9')
lo=str[i*2+1]-'0';
else if(str[i*2+1]>='a'&&str[i*2+1]<='f')
lo=str[i*2+1]-'a'+10;
else
lo=str[i*2+1]-'A'+10;
digit16[i]=hi*16+lo;
}
return i; /*length of the number*/
}