gpt4 book ai didi

c - 如何在 C 中将 unsigned char 打印为 2 位十六进制值?

转载 作者:太空狗 更新时间:2023-10-29 17:05:26 26 4
gpt4 key购买 nike

我正在尝试将 unsigned char 值打印为 2 位十六进制值,但总是以 4 位十六进制值的形式得到结果,不确定我的代码有什么问题。

// unsigned char declaration
unsigned char status = 0x00;
// printing out the value
printf("status = (0x%02X)\n\r", (status |= 0xC0));

我期待一个 2 位数的十六进制结果作为 0xC0 ,但我总是得到 0xC0FF .

同样,当我尝试使用 %bu 将相同的变量(状态)打印为无符号字符时格式标识符我得到的输出为 255 .

如何只得到两个十六进制字符作为输出?

最佳答案

据我所知,Keil C compiler不完全符合C标准。如果是这样,它很可能没有完全遵循标准的提升规则,例如将 char 值传递给可变参数函数;在 8 位 CPU 上,不自动将 8 位值扩展为 16 位或更多位具有性能优势。

作为解决方法,您可以在将参数传递给 printf 之前显式截断高位。试试这个:

#include <stdio.h>

int main(void) {
unsigned char status = 0x00;
status |= 0xC0;

printf("status = 0x%02X\n", (unsigned int)(status & 0xFF));
return 0;
}

0xFF 按位“与”清除除底部 8 位以外的所有位;转换为 unsigned int 不应该 是必要的,但它保证参数实际上是 printf 预期的类型,带有 "%02X" 格式。

您还应该查阅有关类型提升和 printf 的任何非标准行为的实现文档。

关于c - 如何在 C 中将 unsigned char 打印为 2 位十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com