C / C ++从从stdin一个hexinput读一个字节
题
无法准确找到如何做C / C ++以下的方式。
输入:hexdecimal值,例如:ffffffffff ...
我试图以读出的输入以下代码:
uint16_t twoBytes;
scanf("%x",&twoBytes);
这就是工作正常,所有的,但我怎么劈1bytes uint8_t
值(或者甚至是只读的第一个字节)的2个字节。想读从输入的第一个字节,并将其存储在一个字节矩阵在选择的位置。
uint8_t matrix[50][50]
由于我不是很熟练在格式化/非常感谢从在C / C ++输入读数(和只使用的scanf迄今为止)上如何做到这一点很容易地任何其他的想法(和快,如果它进入)。
编辑:通过使用fread函数,因为它允许一个指定它应该多少字节从所述流(在此情况下标准输入)读出并保存到变量/阵列实测值甚至更好的方法
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
参数
PTR - 指向的内存的(大小*计数)字节的最小大小的块
大小 - 尺寸中的每个元素的字节将被读取
计数 - 元素的数量,每一个的大小的大小的字节数
流 - 指向FILE对象,指定的输入流。
解决方案
%x
读取unsigned int
,而不是一个uint16_t
(认为它们可以是你的特定平台上相同)。
要读只有一个字节,尝试:
uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;
此读取unsigned int
,但读取两个字符(2个十六进制字符等于8位,或一个字节)。
其他提示
您应该能够可变分割是这样的:
uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;
一对夫妇的想法:
1)读它作为字符,并将其转换手动 - 痛苦
2)如果你知道,有4个hexits的倍数,可以只读取twobytes然后转换为一个字节的值具有高= twobytes << 8;低= twobyets&FF;
3)2×%
不隶属于 StackOverflow