gpt4 book ai didi

c++ - 好吧,要么我疯了,要么 IBM 的编译器有错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:59 25 4
gpt4 key购买 nike

如果有人能告诉我原因,我会请他们喝啤酒 streamstream<<(char)忽略 0x05。该程序正在生成 000102030406070809E280081150121314

我认为的预期输出更像是: 00010203040506070809E2800811050505050505050550121314

IBM i(又名 AS/400)C++ 编译器,在 V7R1 上运行。

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <stdint.h>

using namespace std;


typedef int8_t byte;

int main(int argc, char* argv[])
{
stringstream sstr2;
sstr2 << char(0x00);
sstr2 << char(0x01);
sstr2 << char(0x02);
sstr2 << char(0x03);
sstr2 << char(0x04);
sstr2 << char(0x05);
sstr2 << char(0x06);
sstr2 << char(0x07);
sstr2 << char(0x08);
sstr2 << char(0x09);
sstr2 << char(0xe2);
sstr2 << char(0x80);
sstr2 << char(0x08);
sstr2 << char(0x11);
sstr2 << char(0x05);
sstr2 << char(0x05);
sstr2 << char(0x05);
sstr2 << char(0x05);
sstr2 << char(0x05);
sstr2 << char(0x05);
sstr2 << char(0x05);
sstr2 << char(0x05);
sstr2 << char(0x50);
sstr2 << char(0x12);
sstr2 << char(0x13);
sstr2 << char(0x14);

char c;
sstr2 >> c;
while (sstr2.good()) {
cout << hex << uppercase << setw(2) << setfill('0') << (int)c;
sstr2 >> c;
}
cout << endl;
}

最佳答案

是时候将蜂群思维的评论线索提炼成类似有用答案的东西了......

0x05 会给您带来问题,因为您的 AS/400 使用 EBCDIC 编码,这是一个制表符。在 ASCII 系统上,字符 0x09(制表符)给出了类似的问题。

<<>> stringstream 的运算符用于格式化输入和输出,因此可以更改空白字符(例如制表符、空格和行尾)。

您应该使用选项 std::stringstream::binary 当您构建流时,以防止换行序列被更改。

此外,您还必须使用 noskipws 告诉格式化读取运算符不要跳过流中的空格。 I/O 操纵器。

或者,您可以将数据保存到通用容器(例如 std::vector 或 std::string),从而完全避免这种麻烦。

关于c++ - 好吧,要么我疯了,要么 IBM 的编译器有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com