我想将字符串转换为带符号的int。以下是要求。我已将十六进制值作为字符串存储在缓冲区中。现在我想将该值转换为signed int。将字符串转换为带符号的int
buf = "fb869e"
将其转换为signed int。所以o/p应该是-293218。但是当我试图使用strtol转换时,我得到了16483998.那么,我该怎么做?
我想将字符串转换为带符号的int。以下是要求。我已将十六进制值作为字符串存储在缓冲区中。现在我想将该值转换为signed int。将字符串转换为带符号的int
buf = "fb869e"
将其转换为signed int。所以o/p应该是-293218。但是当我试图使用strtol转换时,我得到了16483998.那么,我该怎么做?
0xfb869e == 0x00fb869e == 16483998
作为一个有符号的整数,高位必须设置为产生一个负数。由于给定数字的高位没有设置,它必须是正数。
如果你想把这个数字当作一个24位的数字来处理,那么你必须把第23位填充到其余的高位。这里有一个办法做到这一点:
long n = strtol(...);
if (n > 0xffffff) n |= 0xff000000;
char buf =“fb869e” - 我想转换为signed int。 o/p应该是-293218。我只是试图将字符串转换为长整型。但我没有得到负面价值。 – ulaganathan 2010-09-25 05:51:28
char buf =“fb869e”。我想将其转换为signed int。所以o/p应该是-293218。我只是尝试使用strtol将字符串转换为long。但我没有得到负面的价值。我的十六进制值如下。我需要o/p在signed int中。 “C程序设计” 80000e fcc15e 7ffffe 0b778e 80000e ee4dae 7ffffe 1b1e5e 80000e de2b9e 7ffffe 2b8c4e 80000e ce2e1e 7ffffe – ulaganathan 2010-09-25 05:58:58
@ulganathan:有在我的答案中的错误。改用'if(n> 0x7fffff)...'代替。 – 2010-09-25 06:38:47
strtol将转换字符串长整型
的输出是正确的,这将是16483998
如果您使用atoi,而它将字符串转换为整数,如果超出可表示值INT_MAX或INT_MIN的范围,则返回正确的值。
为什么要0x00fb869e是负数?你应该提供你的电话号码系统的基础上,甚至被允许讲,在一个格式的值是否为另一种格式
char buf =“fb869e”。我想将其转换为signed int。所以o/p应该是-293218。我的十六进制值如下。我需要o/p在signed int中。 80000e fcc15e 7ffffe 0b778e 80000e ee4dae 7ffffe 1b1e5e 80000e de2b9e 7ffffe 2b8c4e 80000e ce2e1e 7ffffe – ulaganathan 2010-09-25 05:57:53
负的十六进制数0xfb869e
是不负。内置数字转换函数不会将其转换为负值,因为它的值是正值。
你在说的是,这是一个24位二进制补码负数的无符号十六进制等价物,并且你需要这个数字。获得该方法是将其转换为正数,然后用计算将其转换为24位二进制补码相当于:
char *buf = "fb869e";
long n;
n = strtol(buf, NULL, 16);
if (n > 0x7fffffL)
n -= 0x1000000L;
非常感谢....这事搞砸了我要过去3小时...再次感谢您的帮助.... – ulaganathan 2010-09-25 07:02:04
也有人建议strtol()
。我只想提sscanf()
作为替代,如:
int i;
char *buf = "fb869e";
if (sscanf(buf, "%x", &i) == 1)
...
感谢您的回复...... – ulaganathan 2010-09-25 10:38:30
使用strtol
它转换string
到long
整数。
哪种语言? – codaddict 2010-09-25 05:28:27
编程语言? – 2010-09-25 05:29:48
你从哪里得到0xfb869e是-293218?斯托尔其实是对的。 – vanza 2010-09-25 05:34:26