题
我正在尝试从文件中读取无符号整数(存储为连续字节)并将它们转换为整数。我试过这个:
file = File.new(filename,"r")
num = file.read(2).unpack("S") #read an unsigned short
puts num #value will be less than expected
我在这里做错了什么?
解决方案 4
好吧,我得到它的工作:
num = file.read(8).unpack("N")
感谢所有的帮助。
其他提示
你不读足够的字节。当你到tadman的答案的评论说,你得到202
代替3405691582
请注意,前2个字节的0xCAFEBABE
是0xCA
= 202
如果你真的想在一个单一号码的所有8个字节,那么你需要阅读比签名更短。
试
num = file.read(8).unpack("L_")
下划线是假设的天然长将是8个字节,这绝对是不能保证。
如何寻找在镐头? (红宝石1.9,第44页)
File.open("testfile")
do |file|
file.each_byte {|ch| print "#{ch.chr}:#{ch} " }
end
each_byte迭代由字节文件字节。
被存储在文件中什么格式的数字?它是十六进制?你的代码看起来正确的给我。
在处理二进制数据打交道,你需要确保你打开文件以二进制模式,如果你使用的是Windows。这同样适用于读取和写入两者。
open(filename, "rb") do |file|
num = file.read(2).unpack("S")
puts num
end
有也可以是取决于源平台上的问题与“端”的编码。例如,基于PowerPC的机器,其中包括旧的Mac系统,IBM Power服务器,PS3集群,或Sun Sparc服务器。
你能张贴它是如何“少”的例子吗?一般有一个明显的模式向数据。
例如,如果你想为0x1234,但你得到0x3412这是一个尾数问题。
不隶属于 StackOverflow