关于在C++中使用整数,我有一个奇怪的问题.
我写了一个简单的程序,它将一个值设置为一个变量然后打印它,但它没有按预期工作.
我的程序只有两行代码:
uint8_t aa = 5;
cout << "value is " << aa << endl;
Run Code Online (Sandbox Code Playgroud)
这个程序的输出是 value is
即,它打印为空白aa.
当我改变uint8_t到uint16_t上面的代码就像一个魅力.
我使用64位的Ubuntu 12.04(精确穿山甲),我的编译器版本是:
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
Run Code Online (Sandbox Code Playgroud) 考虑如下代码:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss;
ss << "a0 b1";
uint8_t byte;
ss >> std::hex >> byte;
std::cout << std::hex << byte << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个输出a,而不是a0即使a0装配在uint8_t十六进制?
$ file testfile.txt\ntestfile.txt: ASCII text\n\n$ cat testfile.txt \naaaabbbbccddef\n\n#include <iostream>\n#include <fstream>\n#include <string>\n#include <cstdint>\ntypedef uint8_t byte; // <-------- interesting\ntypedef std::basic_ifstream<byte> FileStreamT;\nstatic const std::string FILENAME = "testfile.txt";\nint main(){\n FileStreamT file(FILENAME, std::ifstream::in | std::ios::binary);\n if(!file.is_open())\n std::cout << "COULD NOT OPEN FILE" << std::endl;\n else{\n FileStreamT::char_type buff;\n file.read(&buff,1);\n std::cout << (SOMECAST)buff; // <------- interesting\n }\n std::cout << "done" << std::endl;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n根据 typedef 中的内容以及它转换为(或未转换)的内容,它会执行各种愚蠢的操作。
\n\n它恰好适用于“typedef char”并且没有强制转换。(如预期,转换为 int 时为 97)
\n\nuint8_t 和 int8_t 都会打印
\n\n没有演员就什么都没有
转换为 char 或 unsigned char 时没有任何内容 …