0xa5已经朝过char最大值了 所以会有ffffff
int buf;
buf=0xa5
就可以

解决方案 »

  1.   

    因為char是有符號的(即有正負), 而正因為你的0xa5 = 10101001b, 剛好一byte而最高bit是一所以是負數, 而trace的參數所有都是4bytes的, 所以當你call trace的時候, 編譯器把0xa5 -> 0xffffffa5再傳進去, 十進制是一樣的, 要改可以改成這樣
    char buf;
    buf = 0xa5;
    TRACE("%x", (BYTE)buf); // BYTE可改為unsigned char

    BYTE buf;
    buf = 0xa5;
    TRACE("%x", buf);