2

无法完全找到如何在 C/C++ 中执行以下操作的方法。

输入:十六进制值,例如:ffffffffff...

为了读取输入,我尝试了以下代码:

uint16_t twoBytes;
scanf("%x",&twoBytes);

这一切都很好,但是我如何将 2bytes 拆分为 1bytesuint8_t值(或者甚至可能只读取第一个字节)。想从输入中读取第一个字节,并将其存储在字节矩阵中的选择位置。

uint8_t matrix[50][50]

由于我在格式化/读取 C/C++ 中的输入方面不是很熟练(并且到目前为止只使用了 scanf),因此非常感谢任何其他关于如何轻松(如果可以的话,速度很快)的想法。

编辑:通过使用 fread 函数找到了一种更好的方法,因为它可以指定应该从流中读取多少字节(在这种情况下为标准输入)并保存到变量/数组中。

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

参数

ptr - 指向最小大小为 (size*count) 字节的内存块的指针。

size - 要读取的每个元素的大小(以字节为单位)。

count - 元素的数量,每个元素的大小为 size 字节。

stream - 指向指定输入流的 FILE 对象的指针。

cplusplus 参考

4

3 回答 3

2

%x读取 a unsigned int,而不是 a uint16_t(认为它们在您的特定平台上可能相同)。

要仅读取一个字节,请尝试以下操作:

uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;

这读取一个unsigned int,但在读取两个字符后停止(两个十六进制字符等于八位或一个字节)。

于 2009-02-04T19:42:32.330 回答
0

您应该能够像这样拆分变量:

uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;
于 2009-02-04T19:43:08.333 回答
0

几个想法:

1)将其读取为字符并手动转换 - 痛苦

2)如果你知道有4个hexits的倍数,你可以读入twobytes,然后转换成high = twobytes << 8; 低 = 双字节 & FF;

3) %2x

于 2009-02-04T19:47:28.823 回答