以字符编号流式传输

Streaming in a char Number

本文关键字:传输 编号 字符      更新时间:2023-10-16

有没有办法将数字流式传输到无符号字符?

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

您一次正在阅读一个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] 会使您的代码更具可读性。