sprintf int8_t的意外结果

时间:2017-03-03 13:03:52

标签: c

我尝试使用以下代码将int8_t变量的十六进制值写入缓冲区:

#include <stdint.h>
#include <stdio.h>

int main(){

    char buf[16];
    uint16_t val = 0xDEAD;
    int8_t val2 = -50;

    sprintf(buf, "%04x%02x", val, val2);
    printf("%s\n", buf);

    sprintf(buf, "%04x%02x", val, (uint8_t)val2);
    printf("%s\n", buf);

    return 0;

}

输出如下:

deadffffffce
deadce

如何生成第一个结果?

我编译:gcc(Ubuntu 6.2.0-5ubuntu12)6.2.0 20161005

0 个答案:

没有答案