欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3600|回復(fù): 23
打印 上一主題 下一主題
收起左側(cè)

C語言16進制按10進制顯示的問題

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:881381 發(fā)表于 2021-1-29 15:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void UART_Send_DT(unsigned int Num)
{
   unsigned char a,b,c;
   a=Num/100;
   b=(Num%100)/10;
   c=Num%10;
   a=a+0x30;
   b=b+0x30;
   c=c+0x30;
   UART_Send_Byte(a);
   UART_Send_Byte(b);
   UART_Send_Byte(c);
}
為什么這個程序,當(dāng)Num<7F時顯示正常,>7F就不對了?

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:871393 發(fā)表于 2021-1-29 15:33 | 只看該作者
我試了沒有問題
回復(fù)

使用道具 舉報

板凳
ID:871393 發(fā)表于 2021-1-29 15:35 | 只看該作者
而且你這個和16進制沒什么關(guān)系 就是正常的10進制三位數(shù)轉(zhuǎn)字符

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

地板
ID:879809 發(fā)表于 2021-1-29 15:35 來自觸屏版 | 只看該作者
問題顯然不在這里。外面char型給Num賦值做了符號位擴展,變負(fù)數(shù)了。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:878901 發(fā)表于 2021-1-29 16:04 | 只看該作者
你可以試下這個方法,比用除法節(jié)省處理時間。如果輸入大于1000還需要對>1000和>10000處理。
void UART_Send_DT(unsigned int Num)
{
   unsigned char tmp;
  
   tmp=0;
   while(Num>100)
  {
       Num-=100;
       tmp++;
  }
  UART_Send_Byte(tmp+0x30);
  tmp =0;
  while(Num>10)
  {
      Num-=10;
      tmp++;
  }
  UART_Send_Byte(tmp+0x30);
  UART_Send_Byte(Num+0x30);
}

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

6#
ID:879809 發(fā)表于 2021-1-29 16:14 來自觸屏版 | 只看該作者
再說一遍,0x7f擴展到16位int是0x007f,0x80是-256,擴展到int是0xff80還是-256,但是unsigned int 0xff80是65408啊!樓主位代碼沒錯誤,錯誤發(fā)生在調(diào)用這段代碼的代碼。
回復(fù)

使用道具 舉報

7#
ID:881381 發(fā)表于 2021-1-29 17:43 | 只看該作者
發(fā)表于 2021-1-29 15:35
問題顯然不在這里。外面char型給Num賦值做了符號位擴展,變負(fù)數(shù)了。

我程序Num賦值是00~FF
回復(fù)

使用道具 舉報

8#
ID:881381 發(fā)表于 2021-1-29 17:44 | 只看該作者
zhanghya 發(fā)表于 2021-1-29 16:04
你可以試下這個方法,比用除法節(jié)省處理時間。如果輸入大于1000還需要對>1000和>10000處理。
void UART_Sen ...

程序中Num的賦值范圍是00H~FFH,最大才255啊
回復(fù)

使用道具 舉報

9#
ID:881381 發(fā)表于 2021-1-29 17:51 | 只看該作者
本帖最后由 cyq1968 于 2021-1-29 18:04 編輯
zhanghya 發(fā)表于 2021-1-29 16:04
你可以試下這個方法,比用除法節(jié)省處理時間。如果輸入大于1000還需要對>1000和>10000處理。
void UART_Sen ...

問題是小于7F時是正常的,一到80H以上就不對了,會是什么問題?請問 當(dāng)Num賦值7F,a=31,b=32,c=37;當(dāng)賦值為80時,a=de,b=30,c=38;大于80后,都不對了,問題出在什么地方了?
回復(fù)

使用道具 舉報

10#
ID:879809 發(fā)表于 2021-1-29 18:00 來自觸屏版 | 只看該作者
cyq1968 發(fā)表于 2021-1-29 17:51
問題是小于7F時是正常的,一到80H以上就不對了,會是什么問題?

原來你不懂符號位擴展。0x80是-128,擴展到16位int就是0xff80,還是-128,但是你當(dāng)成65408來處理了。你貼的代碼沒問題,是調(diào)用這段代碼的代碼錯了。
回復(fù)

使用道具 舉報

11#
ID:881381 發(fā)表于 2021-1-29 18:12 | 只看該作者
發(fā)表于 2021-1-29 18:00
原來你不懂符號位擴展。0x80是-128,擴展到16位int就是0xff80,還是-128,但是你當(dāng)成65408來處理了。你貼 ...

                 UART_Send_Str("n0.val=");
                  UART_Send_DT(power_count);
                  UART_Send_END();
我調(diào)用程序是這個,第一行發(fā)送字符串,第二行就是調(diào)用。
請問,符號位擴展確實不懂,該怎么解決呢?謝謝是不是應(yīng)該定義成unsigned int變量來解決?
回復(fù)

使用道具 舉報

12#
ID:881381 發(fā)表于 2021-1-29 18:22 | 只看該作者
本帖最后由 cyq1968 于 2021-1-29 18:27 編輯
rundstedt 發(fā)表于 2021-1-29 18:00
原來你不懂符號位擴展。0x80是-128,擴展到16位int就是0xff80,還是-128,但是你當(dāng)成65408來處理了。你貼 ...

     unsigned int power_count=0;            //功率參考值
請問我變量為定義的是無符號整型,為什么會變成-128呢?調(diào)用程序如下:
                  UART_Send_Str("n0.val=");
                  UART_Send_DT(power_count);
                  UART_Send_END();


回復(fù)

使用道具 舉報

13#
ID:332130 發(fā)表于 2021-1-29 21:39 | 只看該作者
前面看上去沒有問題,可能是UART_Send_Byte函數(shù)的問題。
回復(fù)

使用道具 舉報

14#
ID:332130 發(fā)表于 2021-1-29 21:41 | 只看該作者
kaixuan_27 發(fā)表于 2021-1-29 21:39
前面看上去沒有問題,可能是UART_Send_Byte函數(shù)的問題。

改為這樣試試:UART_Send_Byte( (char)a );
回復(fù)

使用道具 舉報

15#
ID:879809 發(fā)表于 2021-1-29 21:57 | 只看該作者
a=Num/100;前面加一句Num&=0xff;
回復(fù)

使用道具 舉報

16#
ID:275826 發(fā)表于 2021-1-30 21:52 | 只看該作者
程序完全正確,沒有問題
回復(fù)

使用道具 舉報

17#
ID:213173 發(fā)表于 2021-1-31 10:27 | 只看該作者
本帖最后由 wulin 于 2021-1-31 16:30 編輯

樓主這個函數(shù)看似沒有什么問題,Num>127出錯的問題也不在此,但如果Num>999就肯定會出問題。試試如下寫法:
void UART_Send_DT(unsigned int Num)
{
        unsigned char a,b,c;
        a=Num/100%10+0x30;
        b=Num/10%10+0x30;
        c=Num%10+0x30;
        UART_Send_Byte(a);
        UART_Send_Byte(b);
        UART_Send_Byte(c);
}
回復(fù)

使用道具 舉報

18#
ID:879809 發(fā)表于 2021-1-31 14:54 | 只看該作者
無符號0x80是128,也就是說樓主超過128后出了問題,距離999還很遠(yuǎn)啊。
回復(fù)

使用道具 舉報

19#
ID:822755 發(fā)表于 2021-1-31 21:09 | 只看該作者
應(yīng)該是傳入的數(shù)據(jù)有問題。
回復(fù)

使用道具 舉報

20#
ID:881381 發(fā)表于 2021-2-1 17:36 | 只看該作者
KongQuan 發(fā)表于 2021-1-31 21:09
應(yīng)該是傳入的數(shù)據(jù)有問題。

傳入的數(shù)據(jù)定義是unsigned char,無符號字符,會不會和unsigned int無符號整型起沖突?
回復(fù)

使用道具 舉報

21#
ID:881381 發(fā)表于 2021-2-1 17:44 | 只看該作者
rundstedt 發(fā)表于 2021-1-29 15:35
問題顯然不在這里。外面char型給Num賦值做了符號位擴展,變負(fù)數(shù)了。

請問外面定義的是unsigned char無符號字符,會不會影響?
回復(fù)

使用道具 舉報

22#
ID:873001 發(fā)表于 2021-2-1 18:04 | 只看該作者
void UART_Send_DT(unsigned char Num)
這樣試一下看行不
回復(fù)

使用道具 舉報

23#
ID:881381 發(fā)表于 2021-2-1 18:35 | 只看該作者
統(tǒng)一回復(fù):應(yīng)該還是3樓大大說的問題,數(shù)據(jù)經(jīng)過了多次傳遞,其中有一個變量被設(shè)置成char了,今天終于抓了出來,明天上機試一下,再給大家說結(jié)果,謝謝大家!
回復(fù)

使用道具 舉報

24#
ID:881381 發(fā)表于 2021-2-2 10:15 | 只看該作者
經(jīng)程序?qū)嶋H測試,問題解決,確實是參數(shù)類型問題,找到其中一個參數(shù)被設(shè)成了char,改成unsigned char后,問題解決。謝謝大家!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表