将十六进制从 .txt 带到 C 中的 array/string

Bringing Hexadecimal from .txt to a array/string in C

我的问题是我有一个文本文件,其中包含十六进制的此信息并由此打印:

fprintf(todos,"ff ff %02x 07 03 24 %02x %02x %02x %02x %02x\n",id,posl,posh,vell,velh,soma) ;

所有变量都采用 'int' 格式并具有十进制值

这是结果的一个例子

0xff 0xff 0x01 0x07 0x03 0x24 0x0c 0x00 0x02 0x01 0x3e

我想把这个序列放到程序里面的array/string。 但是,当我尝试使用 'fgets' 或 'fgetc' 来选择每个单独的元素时,它根本不起作用,因为当我尝试打印它时,结果类似于

' '

发生这种情况是因为我正在考虑将十六进制数作为字符吗?还是有其他我看不到的原因?

这太像作业了,所以我不想做太多。

第一位:简化输入。这已从问题中删除,但了解这一点很重要。

posl = pos & 0xFF; // using masking to ignore the upper bytes
posh = (pos >> 8) & 0xFF; // using shifting to move the upper byte into
                          // the lower, and then masking

给定位置 42330 (0xA55A)

pos1 变为 A55A AND 00FF005a

Pos2 变为 A55A right shift 800A5(如果 int 由于符号扩展而为 16 位,则可能 FFA5)。 00A5 然后像 pos1 一样被屏蔽。

无需 if 语句、模数或任何其他冗长的代码。

接下来,如果你要读写同一个文件,你必须注意文件句柄指向文件中的哪个位置,如果你想读取你刚写的行,你将必须fseek回到行首。如果没有一堆额外的簿记,这可能会很棘手。玩得开心!

假设您找到了要阅读的行,fscanf 将使恢复数据变得容易。

int count = fscanf(todos, "ff ff %x 07 03 24 %x %x %x %x %x\n",
                       &id, &posl, &posh, &vell, &velh, &soma);

简单的方法是克隆输出行并用适当的格式说明符替换变量。读取的每个值都需要去某个地方,因此您需要提供变量的地址。

在提供的示例中,我将 fscanf 的 return 值存储为计数。计数将设置为成功读取的请求变量的数量。如果 count 没有读取请求的变量数,在本例中为 6,则该行未成功解析。

将数据放回原处就是在正确的位置下注正确的字节,因此我们使用左移运算符来撤消我们之前使用右移所做的操作,然后在低位字节中进行掩码。

pos = posh<<8 | posl;