我想将字符串转换为带符号的整数。以下是要求。我已将十六进制值作为字符串存储在缓冲区中。现在我想将该值转换为有符号整数。
buf = "fb869e"
将其转换为有符号整数。所以 o/p 应该是 -293218。但是当我尝试使用 strtol 进行转换时,我得到的是 16483998。那我该怎么办?
最佳答案
十六进制数 0xfb869e
不是负数。内置的数字转换函数不会将其转换为负值,因为它的值为正数。
你的意思是,这是 24 位 2s 补码负数的无符号十六进制等价物,你想要那个数字。获取方法是将其转换为正数,然后使用计算将其转换为等效的 24 位 2s 补码:
char *buf = "fb869e";
long n;
n = strtol(buf, NULL, 16);
if (n > 0x7fffffL)
n -= 0x1000000L;
关于将字符串转换为有符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792610/