有没有办法将数字流式传输到无符号字符?
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 值:
4951 49 52 49 53 49 54
但我想要的是每个令牌的数值:
13 14 15 16 17 18 19 20
您一次正在阅读一个char
,这意味着您可以'1'
,'3'
,跳过空格,'1'
,'4'
,跳过空格等。
要将值读取为 NUMBERS,您需要使用整数类型作为临时类型:
unsigned short s;
bytes >> s;
myChars[i] = s;
现在,流将读取一个整数值,例如 13、14,并将其存储在 s 中。然后将其转换为带有 myChars[i] = s;
的unsigned char
。
有很多错误检查,您将绕过这些错误检查来执行此操作,而无需临时检查。例如,分配的每个数字是否适合一个字节,并且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]
会使您的代码更具可读性。