gpt4 book ai didi

ruby-on-rails - Ruby 字符串解包如何用于提取 16、32 和 64 位有符号/无符号值?

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:35 26 4
gpt4 key购买 nike

Ruby 解包 8 位有符号/无符号字符基本上是将每个字节(字符)的十进制值作为数组返回,

'12'.unpack 'C*'
# => [49, 50]

因此,我可以理解从字符串中解包 8 位有符号/无符号字符。但是16、32 和 64 位签名/未签名解包是如何工作的?

'12'.unpack('S*')
# => [12849]
'1234'.unpack('L*')
# => [875770417]
'12345678'.unpack('Q*')
# => [4050765991979987505]

从上面的输出我可以理解S、L和Q正在相应地选择字节2、4和8,但是这个值是如何计算的?

最佳答案

它基本上是 256 基数,转换为 Integer

▶ '12'.unpack('S*') == [50 * 256 + 49]
#⇒ true

▶ '1234'.bytes
#⇒ [49, 50, 51, 52]
▶ '1234'.unpack('L*') ==
▷ [52 * 256 * 256 * 256 + 51 * 256 * 256 + 50 * 256 + 49]
#⇒ true

请注意,SLQ 依赖于平台。为了确保 little-endian,可以使用(感谢@NeilSlater):

▶ '12'.unpack('S<*') == [50 * 256 + 49]
#⇒ true

对于大端,可以使用 > 修饰符:

▶ '12'.unpack('S>*') == [49 * 256 + 50]
#⇒ true

关于ruby-on-rails - Ruby 字符串解包如何用于提取 16、32 和 64 位有符号/无符号值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46098299/

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