1

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

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

4

2 回答 2

1

char一次阅读 a,这意味着您得到'1', '3', 跳过空格, '1', '4', 跳过空格等。

要将值读取为 NUMBERS,您需要使用整数类型作为临时值:

unsigned short s;
bytes >> s;
myChars[i] = s; 

现在,流将读取一个整数值,例如 13、14,并将其存储在 s 中。然后将其转换为unsigned charwith myChars[i] = s;

于 2013-09-05T12:45:18.957 回答
0

所以有很多错误检查,你会绕过做这个没有临时的。例如,分配的每个数字是否适合一个字节,是否有bytes比 的元素更多的数字myChars?但是假设你已经使用了那些你可以使用的istream_iterator<unsigned short>

copy(istream_iterator<unsigned short>{ bytes }, istream_iterator<unsigned short>{}, begin(myChars))

Live Example


此处的附加说明: Achar[]通常包含一个以空字符结尾的字符串。假设这不是您想要的,您最好向读者表明您不是这样使用它的。在中,你被赋予int8_t/uint8_t来做这件事。使用类似的东西:uint8_t myChars[8]将使您的代码更具可读性。

于 2018-08-16T18:08:47.457 回答