用c ++打印十六进制代码,但只打印“g”

时间:2014-04-10 07:01:46

标签: c++

我对以下代码有疑问。当我运行它时,它始终只打印“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;
}

2 个答案:

答案 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;尝试将其打印为角色