在Ada中写入字节或字节数组

在Ada中写入字节或字节数组,ada,Ada,我正在为Ada中的Brainf***编写一个简单的编译器,但是我在代码生成方面遇到了严重的问题,因此我无法正确地生成带有操作码指令的二进制文件,因为每当我编写该文件时,它都会像保存整数一样保存十六进制值。(整数大小) 我制作了一个简单的wat样本,我尝试制作: With Ada, Ada.Sequential_IO, Ada.Integer_Text_IO; Use Ada; procedure main is type Byte is range -128 .. 127; fo

我正在为Ada中的Brainf***编写一个简单的编译器,但是我在代码生成方面遇到了严重的问题,因此我无法正确地生成带有操作码指令的二进制文件,因为每当我编写该文件时,它都会像保存整数一样保存十六进制值。(整数大小)

我制作了一个简单的wat样本,我尝试制作:

With Ada, Ada.Sequential_IO, Ada.Integer_Text_IO;
Use Ada;

procedure main is

   type Byte is range -128 .. 127;
   for  Byte'Size use 16;

   package Bin_IO is new Sequential_IO(Integer);
   File      : Bin_IO.File_Type;
   FileName  : constant String := "teste.bin";
   Num       : Byte;

begin
   Bin_IO.Create(File => File,
                 Name => FileName);

   Num := 16#FF#;        
   Bin_IO.Write(File => File,
                Item => Num);

   Bin_IO.Close(File => File);
end main;
文件中的spected结果只是FF,但是,当我在hex编辑器中打开文件时,我有FF00 0000


如何正确保存操作码指令???

尝试将第9行更改为:

package Bin_IO is new Sequential_IO(Byte);
它将通用包更改为字节序列。
Bin_IO.Write现在应该改为写入字节。

我找到了功能解决方案

我将类型改为字符类型,我只是将机器操作码转换为字符类型并写入文件,这很好…,我不知道这是否是最好的方法,但有效

With Ada, Ada.Sequential_IO, Ada.Integer_Text_IO;
Use Ada;

procedure main is

   package Bin_IO is new Sequential_IO(Character);
   File      : Bin_IO.File_Type;
   FileName  : constant String := "teste.bin";
   Num       : Character;

begin
   Bin_IO.Create(File => File,
                 Name => FileName);

   Num := Character'Val(16#97#);
   Bin_IO.Write(File => File,
                Item => Num);

   Bin_IO.Close(File => File);
end main;

档案有多大?你确定十六进制编辑器不只是为了显示整个世界而扩展吗?换句话说,文件是1字节还是4字节大?将Bin_IO更改为
package Bin_IO is new Sequential_IO(字节)还不够吗?@woutervannifferick这是我的另一个想法……哦,当我试图写一个简单的16#F#时,我没有意识到我的错误,不是工作,但是,当我试图写例如16#FF#时,我得到了一个错误:(…那是因为它似乎超出了范围(-128..127)我认为更好的选择是使用
接口。无符号8
。但请注意,OP的
字节实际上是16位(
对于字节大小使用16
)。