2013-02-28 15 views
-1

我有一个问题,并希望你们可以帮助我。我为我的项目使用了32位uC。我通过键盘接收Uart上的字符到uC(通过超级终端)。因为我只使用C,我将这些字符存储到char类型的缓冲区中。例如,我需要发送一个十六进制的地址作为输入,如0xff502035。我用超级终端在Uart上发送了它,并将它存储在我的缓冲区中。然后我想将其转换为整数(来自char),以便将其传递给我的函数,该函数将读取存储在该位置的值。字符数组到十六进制转换

所以我需要的是这样的:转换成一个int的char []。所以如果我的缓冲区包含“0xff502035”,我需要它作为0xff502035整数类型。提前谢谢你帮助我。

最好的问候, Laurentiu

+0

'atoi'是你的朋友 – SomeWittyUsername 2013-02-28 12:42:03

+0

@icepack - 不是如果输入字符串是基于16 ... – slugonamission 2013-02-28 12:43:45

+0

@ icepack:我试着atoi,但如果只适用于“1234”...而不是“0Xff253447 “;( – Laurentiu 2013-02-28 14:10:27

回答

0

我不打算提供的全样本,但有一个看看strtol功能“如何将字符串到数字转换”。

+0

)你好,非常感谢提示我已经尝试过了,但我面临一个小问题..如果我输入一个像”0xf5f500“这样的字符串,它会正确转换它,但是对于像”0xf5f500ff“这样的字符串,如果给出完全错误的值?任何想法为什么??谢谢 – Laurentiu 2013-02-28 13:36:05

+0

@Laurentiu这将是因为你将它分配给一个int。鉴于它是一个32位uC,正值的整数范围是从0x00000000 - 0x7FFFFFFF,其中顶部bit用作“符号位”(或者相当于2mil左右的负数),查看两个数字,看看为什么。你输入的字符串在这个范围之外,因此将是一个负数。答案是,使用更长的数据类型或将int标记为无符号。 – slugonamission 2013-02-28 17:56:28

+0

感谢您的回答。问题是我试图使它无符号整型或长数据类型,但输出是相同的... 0x7FFFFFFF。我病了,但今天我会进一步调查这个问题... – Laurentiu 2013-03-04 08:54:19

0

已在此论坛上回复此问题,以上链接。

但是,完成后,尽管地址以十六进制格式记录并以字符串形式传输,但实际上它是一个最终以二进制格式解释的地址。函数strtoul可以在32位和64位系统上安全地使用,将十六进制格式的地址转换回原始格式。

char * buf; //包含字符串格式的地址

char * endptr;

int * ptr;

ptr =(int *)strtoul(buf,& endptr,16);

+0

tr = strtoul(buf,&endptr,16); //校正 – 2013-02-28 12:56:59

+0

不要在自己的帖子中写一条评论,指出“更正”。点击“编辑”按钮并修复它。 – Mike 2013-02-28 12:57:47

+0

另外,[strtoul()](http://linux.die.net/man/3/strtoul)返回一个无符号长整型,而不是'int *' – Mike 2013-02-28 12:59:41

相关问题