十六进制数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)