所以我目前需要读入一串十六进制 ASCII 字符并使用它们来确定特定的操作码。为此,我打开一个文本文件(它不是真的,但为了简单的解释,我们称之为)然后在行中读取。因此,如果我得到像 40f1 这样的行...我让函数读取 2 个字符并将它们作为无符号整数存储到 mem_byte 中。然后我将它转换为一个字符以用作数组并保留信息的“字节”价值或通过读取 2 个十六进制数字的 ASCII 字符表示获得的两个十六进制数字的数值。
void getInstructions(FILE* read_file, int* stack_point, char** instructions, int size)
{
unsigned int mem_byte;
int ins_idx = 0;
char* ins_set = malloc(sizeof(char) * size); //Set size of the array of bytes for memory. Temporarily holds the memory of the program
fscanf(read_file, "%d", stack_point);
//Reading in the memory from the program file
fscanf(read_file, " %2x", &mem_byte); //Initial read to clear whitespace
ins_set[ins_idx] = (char) mem_byte;
ins_idx++;
while(fscanf(read_file, "%2x", &mem_byte) != 0) //Loops and reads 1 byte at a time until the fscanf hits the whitespace/end of the line its reading
{
ins_set[ins_idx] = (char) mem_byte;
printf("Byte: %x\n", ins_set[ins_idx]);
ins_idx++;
}
strcpy(*instructions, ins_set); //Copy the instruction set back to the original pointer for memory
free(ins_set);
return;
}
所以我遇到的问题是,如果我打印出测试结果,我会得到
Byte: 40
Byte: fffffff1
这意味着代码将 char 扩展为 4 字节数据类型。我不确定 char 是否包含来自 unsigned int 的信息并将其打印出来,或者我误解了 %x 或类型转换的工作原理。我想让我的 char 指令数组只保存 2 个十六进制数字的信息,仅此而已。