Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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,我在6502模拟器上的工作正在继续。我在嵌入式处理器仿真中遇到了一些怪癖,其中我需要在0x1000开始的数组中加载6502二进制文件 当然,加载文件很容易。但偏移部分不是。在C语言中,我很容易做到 下面是加载我正在使用的文件的代码: def loadbinary(filename) @prog = File.open(filen, "rb") { |io| io.read } @imagesize = @prog.size end 如果加载位置为0x1000,则前面的空

我在6502模拟器上的工作正在继续。我在嵌入式处理器仿真中遇到了一些怪癖,其中我需要在0x1000开始的数组中加载6502二进制文件

当然,加载文件很容易。但偏移部分不是。在C语言中,我很容易做到

下面是加载我正在使用的文件的代码:

  def loadbinary(filename)
    @prog = File.open(filen, "rb") { |io| io.read }
    @imagesize = @prog.size
  end
如果加载位置为0x1000,则前面的空格可以为空(0x1000之前)

有什么想法吗

对于任何感兴趣的人,这是我在GitHub上的


谢谢。

好吧,你不能
io.read
返回一个数组和一个字符串;它不会写入预先存在的数组

您必须先读入一个数组,然后读入另一个数组。差不多

progimage = io.read.bytes.to_a
image[start, progimage.size] = progimage

幸运的是,几乎所有现在运行Ruby的系统都比C64有更多的内存和CPU能力,因此使用额外的数组并不太麻烦。

您可能需要分配一个
n
字节的数组,其中
n
是您想要模拟的可寻址RAM的大小。从那里,您可以开始将从文件读入的数据存储到“RAM”中

这是我首先要说的:

def loadbinary(filename)
  @prog = File.read(filename, 'rb')
  @imagesize = @prog.bytesize
end

RAM_SIZE = 1024 * 64
RAM = Array.new(RAM_SIZE)

loadbinary('/path/to/foo')
RAM[0x1000, @imagesize] = @prog.bytes.to_a
注意:不能使用
String.size
获取字符串的长度,因为它允许使用多字节字符。相反,要获取字节数,您需要
字节大小
,根据:

返回str的长度(字节)


类似地,我们不能尝试使用
split(“”)
@prog
转换为数组,因为这也允许使用多字节字符。相反,我们可以获取字节并将其转换为数组。可以使用
unpack
bytes来完成。要想使a

不返回数组,它返回的实际上是一个字符串,但它只是一个充满字节的“字符串”。字节可以表示任何内容
IO.read('/dev/null')。class=>String
Doh,brain fart。当然,它不会返回
数组
。。。让我重新措辞。(感谢您的关注)