有没有办法将数字流式传输给unsigned char?
istringstream bytes( "13 14 15 16 17 18 19 20" );
unsigned char myChars[8];
for( int i = 0; i < 8 && !bytes.eof(); i++ )
{
bytes >> myChars[i];
cout << unsigned( myChars[i] ) << endl;
}
此代码当前输出前8个非空格字符的ascii值:
49 51 49 52 49 53 49 54
但我想要的是每个标记的数值:
13 14 15 16 17 18 19 20
答案 0 :(得分:1)
您正在一次阅读char
,这意味着您获得'1'
,'3'
,跳过空格,'1'
,'4'
,跳过空间等。
要将值读取为NUMBERS,您需要使用整数类型作为临时值:
unsigned short s;
bytes >> s;
myChars[i] = s;
现在,流将读取整数值,例如13,14,并将其存储在s中。然后,使用unsigned char
将其转换为myChars[i] = s;
。
答案 1 :(得分:0)
因此有很多错误检查,您将绕过这些错误检查而没有临时的帮助。例如,是否每个数字都在一个字节中分配了 fit ,并且bytes
中的数字是否比myChars
的元素多?但是假设您已经精疲力尽,可以只使用istream_iterator<unsigned short>
:
copy(istream_iterator<unsigned short>{ bytes }, istream_iterator<unsigned short>{}, begin(myChars))
此处的附加说明:char[]
通常包含以null终止的字符串。假设这不是您想要的,那么请您向读者指出不是您的使用方式。在c++11中,您得到了int8_t
/uint8_t
的权限。使用类似uint8_t myChars[8]
的代码将使您的代码更具可读性。