我在使用 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 位 int
是 0xff01u
。
我建议在进行位操作时始终使用无符号类型,将负 int
传递给 %X
严格来说是未定义的行为。
要去掉高位,你可以这样做
sprintf(&str_2[i * 2], "%02X", ~OWReadByte() & 0xffu);
关于c - sprintf 在 C 中毫无理由地将 FF 放在前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065720/