【发布时间】:2018-04-29 09:28:05
【问题描述】:
我正在尝试编写一个函数,该函数将 .unpack('Q')(解压缩到 uint64_t)而不访问解压缩方法。
当我手动从字符串转换为二进制到 uint64 时,我得到的结果与 .unpack('Q') 不同:
Integer('abcdefgh'.unpack('B*').first, 2) # => 7017280452245743464
'abcdefgh'.unpack('Q').first # => 7523094288207667809
我不明白这里发生了什么。
我也不明白为什么.unpack('Q') 的输出不管输入的大小都是固定的。如果我在 'abcdefgh' 之后添加一千个字符然后 unpack('Q') 它,我仍然只是得到[7523094288207667809]?
【问题讨论】:
-
因为指令不同。如果你这样做
'abcdefgh'.unpack('C*').pack('c*')我会得到同样的结果。但是,如果您将其转换为不同位长度的字符,您将获得不同的位变量存储在您的操作系统中。但本质上它们是相同的。 -
试试这个,
'abcdefgh'.unpack('C*').pack('Q*')。您将得到不同的结果,即 64 位。 -
我选择
C*,因为它返回二进制值而不是它的string representation。