gpt4 book ai didi

c - Python 十六进制到有符号整数的转换

转载 作者:行者123 更新时间:2023-11-30 19:28:22 26 4
gpt4 key购买 nike

我正在调试一个 C 程序,该程序使用 %ld 作为格式通过 scanf() 接受输入。

我需要发送一个等于0xfffffffffffffffa的输入。

如果我使用Python将上述十六进制值转换为十进制,我得到:18446744073709551610,如下所示:

>>> a = 0xfffffffffffffffa
>>> a
18446744073709551610L

但是,当我调试程序时,我可以看到该值被程序读取为:0x7ffffffffffffffff

那么,有没有办法生成一个小数,以便 scanf() 将其读取为 0xfffffffffffffffa 而不是 0x7ffffffffffffffff?

最佳答案

scanf2 个转换说明符用于读取十进制数。 u 将一个无符号十进制整数读取到无符号整数类型的变量中,d 读取一个有符号十进制整数(转换为有符号整数类型的变量)。读取有符号十进制整数时,64 位 2 的补码数的最大值将为 2 ** 63 - 1,即 9223372036854775807。当匹配的数字超过此值时,scanf仍会匹配它,但将相应的参数设置为最大值。

对于无符号 64 位,最大值为 2 ** 64 - 118446744073709551610 适用于无符号输入,但您需要有符号数字,其中 0xfffffffffffffffa 是 2 的补码表示形式。其实是这样的

>>> 0xfffffffffffffffa - 2 ** 64
-6

因为负数会通过重复加或减大于最大值直到该值符合范围来转换为无符号数 - 我们现在反转操作并得到 -6

<小时/>

请注意,使用 %ld and scanf 到对象中,然后使用 %lx printf 其值是不正确的,正如您所看到的那样这样做,除非变量是有符号的 int 并且 printf 调用将参数强制转换为 unsigned - 因为 %lx 需要一个 unsigned long int!如果您的编译器没有发出警告,请添加一个开关(例如 -Wall)以启用额外的诊断。

关于c - Python 十六进制到有符号整数的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54038883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com