Ruby:将字节数组转换为整数?



我试图在Ruby中复制C#代码片段:

var guid = Guid.Parse("a823efd8-c8c1-4cf5-9aad-3b95d6f11371");
byte[] a = guid.ToByteArray();
var bigInteger = new BigInteger(a, isUnsigned: true);

在这个答案的帮助下,我已经创建了字节数组:

guid = 'a823efd8-c8c1-4cf5-9aad-3b95d6f11371'
parts = guid.split('-')
mixed_endian = parts.pack('H* H* H* H* H*')
big_endian = mixed_endian.unpack('L< S< S< A*').pack('L> S> S> A*')
byte_array = big_endian.bytes
#=> [216, 239, 35, 168, 193, 200, 245, 76, 154, 173, 59, 149, 214, 241, 19, 113]

我不确定如何将这个字节数组转换为上面C#示例的第3行整数。谁能告诉我该怎么做?

直接的方法就是进行计算。c#代码实际上将字节视为小端序,这就是为什么我们在这里首先反转数组:

byte_array.reverse.inject(0) {|m, b| (m << 8) + b }

(这给了我150306322225734326370696054959344185304与您的输入。)

我不认为有一个直接的方法来转换二进制字符串或字节数组为整数。我怀疑任何更有效的方法都需要公开整数的内部表示。

最新更新