关于在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) 我在cppreference的文档中看到了这个例子std::numeric_limits
#include <limits>
#include <iostream>
int main()
{
std::cout << "type\tlowest()\tmin()\t\tmax()\n\n";
std::cout << "uchar\t"
<< +std::numeric_limits<unsigned char>::lowest() << '\t' << '\t'
<< +std::numeric_limits<unsigned char>::min() << '\t' << '\t'
<< +std::numeric_limits<unsigned char>::max() << '\n';
std::cout << "int\t"
<< std::numeric_limits<int>::lowest() << '\t'
<< std::numeric_limits<int>::min() << '\t'
<< std::numeric_limits<int>::max() << '\n';
std::cout << "float\t"
<< std::numeric_limits<float>::lowest() << '\t'
<< std::numeric_limits<float>::min() << '\t'
<< std::numeric_limits<float>::max() << '\n';
std::cout << "double\t"
<< std::numeric_limits<double>::lowest() << '\t'
<< std::numeric_limits<double>::min() << '\t'
<< std::numeric_limits<double>::max() …
Run Code Online (Sandbox Code Playgroud) 我想在C++中使用无符号的8位变量.关于算术的任何一个unsigned char
或者uint8_t
做的伎俩(这是预期的,因为AFAIK uint8_t
只是一个别名unsigned char
,或者调试器提出它.
问题是,如果我在C++中使用ostream打印出变量,它会将其视为char.如果我有:
unsigned char a = 0;
unsigned char b = 0xff;
cout << "a is " << hex << a <<"; b is " << hex << b << endl;
Run Code Online (Sandbox Code Playgroud)
然后输出是:
a is ^@; b is 377
Run Code Online (Sandbox Code Playgroud)
代替
a is 0; b is ff
Run Code Online (Sandbox Code Playgroud)
我尝试过使用uint8_t
,但正如我之前提到的,那是typedef'ed unsigned char
,所以它也是如此.如何正确打印变量?
编辑:我在我的代码中的许多地方都这样做.有没有什么办法可以做到这一点,而不铸造int
我想打印每一次?
我最近注意到 numeric_limits::max() 和 numeric_limits::min() 似乎不适用于 uint8_t 和 int8_t。这是有原因的还是可能是错误?我在自己的电脑上使用 gcc 编译器尝试过:
#include <iostream>
#include <limits>
using namespace std;
int main()
{
std::cout << "numeric_limits<uint8_t>::max() = " << numeric_limits<uint8_t>::max() << std::endl;
std::cout << "numeric_limits<int8_t>::max() = " << numeric_limits<int8_t>::max() << std::endl;
std::cout << "numeric_limits<int8_t>::min() = " << numeric_limits<int8_t>::min() << std::endl;
std::cout << "numeric_limits<uint16_t>::max() = " << numeric_limits<uint16_t>::max() << std::endl;
std::cout << "numeric_limits<int16_t>::max() = " << numeric_limits<int16_t>::max() << std::endl;
std::cout << "numeric_limits<int16_t>::min() = " << numeric_limits<int16_t>::min() << std::endl;
std::cout << "numeric_limits<uint32_t>::max() = " << …
Run Code Online (Sandbox Code Playgroud) 为什么我的输出空白?指针可以修改但无法读取。为什么?
#include <iostream>
using namespace std;
int main(){
int a = 0;
char *x1,*x2,*x3,*x4;
x1 = (char *)&a;
x2 = x1;x2++;
x3 = x2;x3++;
x4 = x3;x4++;
*x1=1;
*x2=1;
*x3=1;
*x4=1;
cout <<"@" << *x1 << " " << *x2 << " " << *x3 << " " << *x4 << "@"<<endl ;
cout << a << endl;
}
Run Code Online (Sandbox Code Playgroud)
[Desktop] g++ test_pointer.cpp
[Desktop] ./a.out
@ @
16843009
Run Code Online (Sandbox Code Playgroud)
我想通过使用char的指针类型来读取integer的值。这样我就可以逐字节读取。