无法在C / C ++中找到如何执行以下操作的方法。
输入:十六进制值,例如:ffffffffff ...
为了阅读输入,我尝试了以下代码:
uint16_t twoBytes;
scanf("%x",&twoBytes);
这样可以正常工作,但是如何将2字节分成1个字节uint8_t
值(或者甚至可以只读取第一个字节)。想从输入读取第一个字节,并将其存储在选择位置的字节矩阵中。
uint8_t matrix[50][50]
由于我不熟练使用C / C ++中的输入格式化/读取(到目前为止只使用了scanf),因此非常感谢任何其他关于如何轻松实现这一目标的想法(如果能够快速完成)。< / p>
编辑:通过使用fread函数找到更好的方法,因为它允许指定它应该从流中读取多少字节(在本例中为stdin)并保存到变量/数组。
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
参数
ptr - 指向最小大小为(size * count)字节的内存块的指针。
size - 要读取的每个元素的字节大小。
count - 元素数量,每个元素的大小为字节大小。
stream - 指向指定输入流的FILE对象的指针。
答案 0 :(得分:2)
%x
读取unsigned int
,而不是uint16_t
(认为它们在您的特定平台上可能相同)。
要只读一个字节,请尝试:
uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;
这读取unsigned int
,但在读取两个字符(两个十六进制字符等于8位或一个字节)后停止。
答案 1 :(得分:0)
您应该能够像这样拆分变量:
uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;
答案 2 :(得分:0)
有几点想法:
1)将其作为字符读取并手动转换 - 痛苦
2)如果你知道有4个十六进制的倍数,你可以只读取两个字节然后转换为一个字节值,其中high = twobytes&lt;&lt; 8;低= twobyets&amp; FF;
3)%2x