gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:33 24 4
gpt4 key购买 nike

我在使用 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/

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