在char数字中流式传输

时间:2013-09-05 12:37:13

标签: c++ stream

有没有办法将数字流式传输给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

2 个答案:

答案 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))

Live Example


此处的附加说明:char[]通常包含以null终止的字符串。假设这不是您想要的,那么请您向读者指出不是您的使用方式。在中,您得到了int8_t/uint8_t的权限。使用类似uint8_t myChars[8]的代码将使您的代码更具可读性。