c - sprintf 在 C 中毫无理由地将 FF 放在前面

标签 c microcontroller led lcd

我在使用 sprintf 时遇到了这个奇怪的问题,它把 FF 放在我拥有的值前面。

(例如)我应该得到 01,但我得到 FF01

我的代码是这样的

while(1)
{

    if(getkey()=='g')
    {
       sprintf(str_2, "%X", ~OWReadByte());
       lcd_delay();
       lcd_string(str_2);
    }
}

我对 LED 做了一些检查,在那里我得到了我想要的值,在使用 sprintf 之后它就搞砸了。

最佳答案

一元 ~ 运算符改变整个 int 的位,而不仅仅是低 8 位。 ~0xfeu(等价于 ~0x00feu)对于 16 位 int0xff01u

我建议在进行位操作时始终使用无符号类型,将负 int 传递给 %X 严格来说是未定义的行为。

要去掉高位,你可以这样做

sprintf(&str_2[i * 2], "%02X", ~OWReadByte() & 0xffu);

关于c - sprintf 在 C 中毫无理由地将 FF 放在前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065720/

相关文章:

C - 基于用户决策的 do/while 循环无法正常工作

无法通过使用 Pthreads 并行化 Quicksort 获得任何加速

c - 如何在 Matlab Coder 中为具有不同输入数量的函数定义输入类型?

sockets - 了解NodeMcu固件存储库

c - 为什么将这些宏函数转换为函数不能正常工作?

c++ - 在表示 UTF 8 的 signed char 和 unsigned char 之间转换

c++ - arduino中的多按钮按下管理

c - PIC24H POT 输入控制 LED 闪烁延迟非线性

java - 打开 LED

iphone - iPhone 5s摄像头LED灯单独接入