将16进制形式的2位字符转换成正常的10进制数字

tony2278 2011-10-28 02:09:48


AnsiString szTemp;
AnsiString Another;

Another = szTemp.sprintf( "%d", szTemp ); //如果szTemp ="00",则Another = 12085764; 如果szTemp ="80",则Another = 12094360


//char RxData[100];
RxData[Cnt++] = szTemp.ToInt() ; //如果是"0A","0B","0C","A2"之类,只要是带有字符的,则转换失败哦!



其实我是想将16进制形式的2位字符转换成正常的10进制数字,再保存到一个数组里面,但是我试了很久都没成功!请教各位大牛,有什么好办法?
...全文
174 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony2278 2011-11-25
  • 打赏
  • 举报
回复

atoi //很久没用,都快忘了这个函数
int atoi(const char *nptr);
//函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零
//否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。
int main(void)
  {
  int n;
  char *str = "12345.67";
  n = atoi(str);
  printf("string = %s integer = %d\n", str, n);
  return 0;
  }
  //执行结果
  //string = 12345.67 integer = 12345
tony2278 2011-10-29
  • 打赏
  • 举报
回复


int Number;
AnsiString szTemp;
char Other[2] = { 0 };
char *pAnOther;

memcpy( Other, szTemp.c_str(), 2 );
Number = strtol( Other, &pAnOther, 16 );

//char RxData[100];
RxData[Cnt++] = Number ; //赋值
tony2278 2011-10-28
  • 打赏
  • 举报
回复
用strtol 函数可以解决问题了,就是将16进制形式的字符转换成正常的10进制数字。
qq120848369 2011-10-28
  • 打赏
  • 举报
回复
如果szTemp ="00",则Another = 12085764;


就是2字节当做short呗,注意字节序问题,没人知道你的需求,自己写吧.
柯本 2011-10-28
  • 打赏
  • 举报
回复
这是CB的程序
Another = szTemp.sprintf( "%d", szTemp ); //如果szTemp ="00",则Another = 12085764; 如果szTemp ="80",则Another = 12094360

这个结果本身就是错的,szTemp 是类.
Another = szTemp.sprintf( "%d", szTemp ); 得到的是类的地址,每次都不一样的

CB有函数的,这样就可以了
RxData[Cnt++] = StrToInt("0x"+szTemp);
ITDeng 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dizuo 的回复:]

C/C++ code

/* strtol example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
long int li1, li2, li3, l……
[/Quote]

围观,如何发成C/C++ code这种格式的呢?
科比布莱恩特 2011-10-28
  • 打赏
  • 举报
回复
li1 = strtol (szNumbers,&pEnd,10);

楼上正解。
ryfdizuo 2011-10-28
  • 打赏
  • 举报
回复

/* strtol example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
long int li1, li2, li3, li4;
li1 = strtol (szNumbers,&pEnd,10);
li2 = strtol (pEnd,&pEnd,16);
li3 = strtol (pEnd,&pEnd,2);
li4 = strtol (pEnd,NULL,0);
printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
return 0;
}
luciferisnotsatan 2011-10-28
  • 打赏
  • 举报
回复
strtol函数
tony2278 2011-10-28
  • 打赏
  • 举报
回复
其实我是想将16进制形式的2位字符转换成正常的10进制数字,请教各位大牛有什么好办法?
tony2278 2011-10-28
  • 打赏
  • 举报
回复
Another = szTemp.sprintf( "%d", szTemp );


RxData[Cnt++] = szTemp.ToInt() ;
可以当成是不相关的,不连续运行的语句~
薛定谔之死猫 2011-10-28
  • 打赏
  • 举报
回复
%d能出现0A,0B这些数?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧