在Ruby中解压缩签名的little-endian
所以我正在研究一些MongoDB协议的东西。所有整数都是带小端的。使用Ruby的标准
Array#pack
方法,我可以将整数转换为我想要的二进制字符串:
positive_one = Array(1).pack('V') #=> 'x01x00x00x00'
negative_one = Array(-1).pack('V') #=> 'xFFxFFxFFxFF'
但是,另一方面,String#unpack
方法将'V'格式记录为具体返回无符号整数:
positive_one.unpack('V').first #=> 1
negative_one.unpack('V').first #=> 4294967295
签名的little-endian字节顺序没有格式化器。我确信我可以使用位移来玩游戏,或者编写我自己的不使用数组打包的字节错误方法,但我想知道是否有其他人遇到过这个并找到了一个简单的解决方案。非常感谢。
没有找到相关结果
已邀请:
4 个回复
才脊烽馈低
打开包装后,您可以应用以下转换
如果你正在处理其他大小的整数,你需要改变魔法常数
(即
)和
(
)。
磋判粗惊
可能不是最干净的,但这将转换字节数组。
究补闯
[编辑删除不太正确的解包指令]
曝匿弄罚
更新:这是更简单的重构,使用Ken Bloom的广义任意长度形式的答案: