c - 如何让 C 中的 strtol() 函数将字符串解释为二进制补码?

标签 c strtol

我想将给定的字符串转换为整数。但是,我意识到,strtol() 会将诸如“0xffc”之类的值解释为值 4092,而不是将其解释为 2 的补码,它应该是 -4。我无法修改字符串,因为它是作为命令行参数给出的。那么我怎样才能得到一个 int 数字,它是将给定字符串解释为 2 的补码的结果?

最佳答案

值 0xffc 被视为 12 位整数(2s 补码)时将变为 -4。否则 (int, short, ...) 它只是 4092。

考虑

int v= strtol(v) ;
if ( v & 1<<11 ) v |= ~0xfff ;

或者对于任意 N 位:

const int N = 12 ;
int v= strtol(v) ;
if ( v & 1<<(N-1) ) v |= ~ ((1<<N)-1) ;

关于c - 如何让 C 中的 strtol() 函数将字符串解释为二进制补码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58688107/

相关文章:

c - 在下面的程序中将产生多少个进程

c++ - 是否有 HTML Tidy 的替代品?

c - 将带有数字的字符串存储为整数数组

c - 为什么 strtol() 对于非常大的数字返回 -1?

c - 数组某些部分的 atoi() 输出错误

c - 将数据从 C 传递到 R

c - C 新手...在未完成的函数声明上在 "UArray2.h:19: error: expected ‘)’ 标记之前获取 ‘*’

c - _dl_close 断言失败

c - 使用 memcpy 和 strtoul 获取乱码而不是数字

c - strtol 重用参数