Ruby如何将字节数组转换为整数 实现与C# BigInteger等效的GUID转换效果
你可以通过两种方式实现和C# new BigInteger(a, isUnsigned: true)完全等效的转换:
实现原理
C#的BigInteger字节数组构造函数默认按小端序解析输入,且isUnsigned: true会忽略符号位解析为无符号整数,Ruby中只需要对已生成的符合C#格式的字节数组做对应顺序转换即可。
代码示例
你可以在现有代码基础上直接追加以下逻辑:
# 接你已有生成byte_array的代码 # 方法1:直接通过字节数组迭代计算 big_integer = byte_array.reverse.inject(0) { |acc, b| acc * 256 + b }
如果追求更简洁高效的写法,也可以跳过字节数组生成步骤,直接用之前得到的big_endian字符串转换:
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*') # 直接转整数,无需生成字节数组 big_integer = big_endian.unpack1('H*').reverse.to_i(16)
两种写法得到的结果和C#侧完全一致。
内容的提问来源于stack exchange,提问作者Argus9
相关产品推荐
相关产品推荐

