相关疑难解决方法(0)

uint8_t无法用cout打印

关于在C++中使用整数,我有一个奇怪的问题.

我写了一个简单的程序,它将一个值设置为一个变量然后打印它,但它没有按预期工作.

我的程序只有两行代码:

uint8_t aa = 5;

cout << "value is " << aa << endl;
Run Code Online (Sandbox Code Playgroud)

这个程序的输出是 value is

即,它打印为空白aa.

当我改变uint8_tuint16_t上面的代码就像一个魅力.

我使用64位的Ubuntu 12.04(精确穿山甲),我的编译器版本是:

gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
Run Code Online (Sandbox Code Playgroud)

c++

129
推荐指数
7
解决办法
7万
查看次数

在调用std :: numeric_limits <unsigned char>成员之前,一元"+"的目的是什么?

在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++ char unary-operator

129
推荐指数
4
解决办法
4070
查看次数

如何使用ostream在c ++中打印unsigned char作为十六进制?

我想在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我想打印每一次?

c++ formatting ostream

68
推荐指数
7
解决办法
11万
查看次数

C++ 为什么数字限制对 uint8_t 和 int8_t 不起作用?

我最近注意到 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)

c++ numeric-limits

2
推荐指数
1
解决办法
1263
查看次数

为什么我的输出空白?

为什么我的输出空白?指针可以修改但无法读取。为什么?

#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的值。这样我就可以逐字节读取。

c++ pointers

1
推荐指数
1
解决办法
86
查看次数