【问题标题】:Problem with string [closed]字符串问题[关闭]
【发布时间】:2023-03-15 05:02:02
【问题描述】:

我正在用 Ruby 编写一个脚本来读取一些包文件并查看它们包含的内容。 我昨天写了一个非常简单的脚本,让我很头疼:

arch = File.new(*file_name*, "r")
z = arch.sysread(1).unpack('H*')
puts z
content = arch.sysread(32)

上面的变量z 的值为10。如果我将它传递给sysread,我会得到一个错误,但是如果我定义一个变量x 并将其赋值为10 并将其传递进去,它运行正常。

为什么我不能将z 传递给sysread

【问题讨论】:

  • 使用p z 而不是puts z 可能z 并不是真正的10。另外,你应该说出你得到了什么错误。

标签: ruby string integer fixnum


【解决方案1】:

以二进制形式读取文件,用"rb"而不是"r",你说它会报错,哪个报错?

无论如何,unpack 函数返回一个Array,在这种情况下,它带有一个十六进制数字作为字符串。您可能想要这样做:content = arch.read(z.first.to_i(16))

这段代码更有意义(如果你想按照我的想法去做):

arch = File.open("filename", "rb") # open the file as binary
z = arch.read(1).bytes.first       # get the first byte as a integer
content = arch.read(z)             # read the next z bytes

【讨论】:

  • 我想从文件中提取一些文本。在文件中放长文本,我需要这个数字。
  • @Sergio,在您的问题中放入文件样本和您想要的输入。文件是二进制的吗?您需要更多内容还是仅此文本? (你可以,也许,读取整个文件)或者你想读取一个二进制文件的一部分,如果它本身的大小是前缀的?这个尺寸是如何保存的?提供更多信息!
  • 我需要以十六进制读取文件,因为我需要这种格式的值。文件扩展名是 *.dat,没有文本。我放了一个头文件的样本。 MTAF¸0 ‹–‹“š ˜'Ñ'‹žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHEAD° @ +- +-
  • 文件大小为 700MB,无法发送
  • 好的,我修改了代码,脚本运行良好,谢谢!
猜你喜欢
  • 2014-09-23
  • 2013-05-04
  • 2014-02-23
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多