Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将三个字节从二进制文件转换为无符号整数的最佳方法?_Ruby - Fatal编程技术网

Ruby 将三个字节从二进制文件转换为无符号整数的最佳方法?

Ruby 将三个字节从二进制文件转换为无符号整数的最佳方法?,ruby,Ruby,将三个字节从二进制文件转换为无符号整数的最佳方法是什么 这是我目前的解决方案,你知道更好的吗 a, b, c = file.read(3).unpack("C*") a << 16 | b << 8 | c a,b,c=file.read(3).解包(“c*”) aOoh..有趣: file.read(3).unpack("C*").inject { |r, n| r << 8 | n } file.read(3).unpack(“C*”).injecti

将三个字节从二进制文件转换为无符号整数的最佳方法是什么

这是我目前的解决方案,你知道更好的吗

a, b, c = file.read(3).unpack("C*")
a << 16 | b << 8 | c
a,b,c=file.read(3).解包(“c*”)
aOoh..有趣:

file.read(3).unpack("C*").inject { |r, n| r << 8 | n }
file.read(3).unpack(“C*”).injection{| r,n | rOoh..fun:

file.read(3).unpack("C*").inject { |r, n| r << 8 | n }
file.read(3).unpack(“C*”).injection{| r,n | r如果您不介意自己添加一个额外的字节,您就可以完成这一切:

n = *("\x00" + file.read(3)).unpack('N')
我不知道这是否更好,这是相当主观的。

如果您不介意自己添加一个额外的字节,您可以用它来完成这一切:

n = *("\x00" + file.read(3)).unpack('N')
我不知道这是否更好,这是相当主观的。

使用BinData gem

require 'bindata'
n = BinData::Uint24be.read(file)
使用BinData gem

require 'bindata'
n = BinData::Uint24be.read(file)

我明白了,通过添加额外字节,您将其转换为32位整数。@skiffr:是的,您需要四个字节来直接解包,而不是手动摆弄位。我明白了,通过添加额外字节,您将其转换为32位整数。@skiffr:是的,您需要四个字节来直接解包,而不是手动摆弄位。