将两个长整型转换为十六进制字符串
Convert Two Longs to a Hex String
我有两个长整型,分别代表 UUID 的最高有效字节和最低有效字节。如何使用 Ruby 将这两个 long 转换为 32 个字符的十六进制表示形式?
尝试使用 %
string format operator,例如 "%016x"
(十六个零填充的十六进制数字):
a = 0xCAFEBABECAFEBABE # => 14627333968358193854
b = 0xDEADBEEFDEADBEEF # => 16045690984833335023
'%016x%016x' % [a, b] # => "cafebabecafebabedeadbeefdeadbeef"
如果您想获得格式正确的 UUID 字符串,有很多方法可以在正确的位置插入破折号;这是第一个想到的:
def longs_to_uuid(a, b)
s = '%016x%016x' % [a, b]
s.scan(/(.{8})(.{4})(.{4})(.{4})(.{12})/).first.join('-')
end
longs_to_uuid(1,2) # => "00000000-0000-0001-0000-000000000002"
如果这是一个问题,请不要忘记考虑字节序...
我有两个长整型,分别代表 UUID 的最高有效字节和最低有效字节。如何使用 Ruby 将这两个 long 转换为 32 个字符的十六进制表示形式?
尝试使用 %
string format operator,例如 "%016x"
(十六个零填充的十六进制数字):
a = 0xCAFEBABECAFEBABE # => 14627333968358193854
b = 0xDEADBEEFDEADBEEF # => 16045690984833335023
'%016x%016x' % [a, b] # => "cafebabecafebabedeadbeefdeadbeef"
如果您想获得格式正确的 UUID 字符串,有很多方法可以在正确的位置插入破折号;这是第一个想到的:
def longs_to_uuid(a, b)
s = '%016x%016x' % [a, b]
s.scan(/(.{8})(.{4})(.{4})(.{4})(.{12})/).first.join('-')
end
longs_to_uuid(1,2) # => "00000000-0000-0001-0000-000000000002"
如果这是一个问题,请不要忘记考虑字节序...