我正在尝试从文件中读取无符号整数(按连续的字节存储),并将它们转换为整数。我尝试了以下代码:
file = File.new(filename,"r")
num = file.read(2).unpack("S") #read an unsigned short
puts num #value will be less than expected
这里我做错了什么?
202
而不是3405691582
。0xCAFEBABE
的前两个字节是0xCA
=202
。num = file.read(8).unpack("L_")
File.open("testfile")
do |file|
file.each_byte {|ch| print "#{ch.chr}:#{ch} " }
end
each_byte以字节为单位迭代文件。
好的,我搞定了:
num = file.read(8).unpack("N")
感谢您的所有帮助。
open(filename, "rb") do |file|
num = file.read(2).unpack("S")
puts num
end
根据源平台,"endian"编码也可能存在问题。例如,基于PowerPC的机器,包括旧的Mac系统、IBM Power服务器、PS3集群或Sun Sparc服务器。
你能举个例子说明它是如何“不同”的吗?通常数据中会有明显的模式。
例如,如果你想要0x1234,但得到的是0x3412,那就是一个字节序问题。