将字符串转换为有符号整型

ula*_*han 4 c string int signed

我想将字符串转换为有符号整数。以下是要求。我已将十六进制值作为字符串存储在缓冲区中。现在我想将该值转换为有符号整数。

buf = "fb869e"将其转换为有符号整型。所以 o/p 应该是 -293218。但是当我尝试使用 strtol 进行转换时,我得到 16483998。那么我应该做什么?

caf*_*caf 5

十六进制数0xfb869e不是负数。内置数字转换函数不会将其转换为负值,因为它的值为正数。

您所说的是,这是 24 位 2s 补码负数的无符号十六进制等价物,并且您想要该数字。获得该值的方法是将其转换为正数,然后使用计算将其转换为等价的 24 位 2 补码:

char *buf = "fb869e";
long n;

n = strtol(buf, NULL, 16);
if (n > 0x7fffffL)
    n -= 0x1000000L;
Run Code Online (Sandbox Code Playgroud)