我是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];
答案 0 :(得分:3)
您的data_to_send.data[2]
字段为char
或unsigned char type
(字节)。
printf
将其视为整数50
,符合格式说明符%d
的要求。
cout
将其视为ASCII代码'2'
的字符50
,正如数据类型所暗示的那样。
答案 1 :(得分:1)
我的猜测是data_to_send.data
是char*
,因此data_to_send.data[2]
是值为50
的char。当您调用printf
时,指定将参数视为整数(%d
),以便打印50
。在C ++中,cout
使用函数重载将具体函数调用到具体类型的参数,在本例中为operator<<
char
。 '2'
的ASCII值为50
,这就是打印2
的原因。