我对以下代码有疑问。当我运行它时,它始终只打印“g”而不是十六进制代码。为什么?如何输出十六进制代码?小提琴:http://ideone.com/FjYr2M
#include <iostream>
using namespace std;
void prepareAndSend() {
char Command[50];
sprintf(Command,"%04XT1000A", "076");
unsigned char checksum = 0x02;
char* p = Command;
while(*p) {
checksum ^= *p++;
}
checksum ^= 0x03;
std::cout << std::hex << checksum << std::endl;
}
int main() {
prepareAndSend();
return 0;
}
答案 0 :(得分:3)
sprintf(Command,"%04XT1000A", "076");
未定义的行为,请打开编译器警告。
sprintf(Command,"%04XT1000A", 0x76);
您还需要投放checksum
以避免使用unsigned char
版本的operator<<
std::cout << std::hex << static_cast<int>(checksum) << std::endl;
答案 1 :(得分:1)
将校验和转换为int
std::cout << std::hex << static_cast<int>(checksum) << std::endl;
由于校验和是unsigned char,因此运算符&lt;&lt;尝试将其打印为角色