printf整数显示的不仅仅是C ++ cout

时间:2017-10-31 09:25:36

标签: c++ printf cout

我是C程序员,拿起C ++

似乎cout有点笨重,我不明白它为什么产生不同的输出。

//The printf below displays value 50
//The cout below display value 2

data_to_send.data[2] = atoi(data_str.c_str());    
printf("\n DEBUG: %d\n",data_to_send.data[2]);
std::cout << "Debug: " << std::dec << data_to_send.data[2];

2 个答案:

答案 0 :(得分:3)

您的data_to_send.data[2]字段为charunsigned char type(字节)。

printf将其视为整数50,符合格式说明符%d的要求。

cout将其视为ASCII代码'2'的字符50,正如数据类型所暗示的那样。

答案 1 :(得分:1)

我的猜测是data_to_send.datachar*,因此data_to_send.data[2]是值为50的char。当您调用printf时,指定将参数视为整数(%d),以便打印50。在C ++中,cout使用函数重载将具体函数调用到具体类型的参数,在本例中为operator<< char'2'的ASCII值为50,这就是打印2的原因。