无法准确找到如何在 C/C++ 中执行以下操作的方法。
输入:十六进制值,例如:ffffffffff...
我尝试了以下代码来读取输入:
uint16_t twoBytes;
scanf("%x",&twoBytes);
一切正常,但我如何将 2 个字节拆分为 1 个字节的 uint8_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 对象的指针。
最佳答案
%x
读取 unsigned int
,而不是 uint16_t
(认为它们在您的特定平台上可能相同)。
要只读取一个字节,试试这个:
uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;
这会读取一个 unsigned int
,但在读取两个字符后停止(两个十六进制字符等于八位或一个字节)。
关于c++ - C/C++ 从标准输入的 hexinput 读取一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/512941/