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

标签 c string int signed

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

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/

相关文章:

CUDA:将数组复制到 GPU

c - 用宏包围一个函数

c - C 中函数返回局部变量错误的地址

c - 不了解 Linux 内核实时调度程序中某些功能的内部结构

c++ - 如何连接 "constant strings"和字符?

检查 float 是否为整数

ios - 二进制表达式 ('int' 和 'NSString' 的无效操作数)

JAVA无法将int转换为short

string - OCaml 测试字符串是否几乎为空或包含关键字

java - 字符串拆分错误输出