c++ - C/C++ 从标准输入的 hexinput 读取一个字节

标签 c++ byte stdin scanf

无法准确找到如何在 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 对象的指针。

cplusplus ref

最佳答案

%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/

相关文章:

c - 如何在任何平台上识别字节的大小?

linux - 仅在标准输入完成时输出到标准输出

c++ - std::atomic::operator++ 真的按值返回吗?

c++ - 排序并跟踪元素

C++重新排列一个整数

c - 交换给定整数中的两位

java - 8位字节转换

arrays - <STDIN> 仅在第一次使用 Ctrl-Z 时在 Perl 脚本中工作

linux - 编写同时接受管道输入和参数的 Shell 函数

C++ 比较成员函数指针