![]() |
發布時間: 2010-7-21 22:56
正文摘要:這是我在本論壇的51hei-5開發板上寫的一個程序,想在12864上顯示:一二三四五六七,可是總是出現這樣的亂碼,請各位大哥看看,謝謝了,十分感謝!!! #include<reg52.h> #include <intrins.h> #def ... |
http://www.zg4o1577.cn/bbs/dpj-130470-1.html keil c51升級到v9.54后,原來的0XFD修復工具失效了,所有寫了這個小工具。 0XFD問題是keil c51中一直存在的一個問題,表現為當C源代碼中使用了漢字等非ASCII字符,而此字符的編碼又恰好包含了大于或等于0xFD的字節時,這個字節將被編譯器刪除,從而最終程序代碼的運行錯誤。 |
關于 Keil 軟件中 0xFD 問題的說明 眾所周知,Keil 軟件的 8051 和 80251 編譯器的所有版本都有一個叫做 0xFD 的問題,主要表現在字 符串中不能含有帶 0xFD 編碼的漢字,否則 Keil 軟件在編譯時會跳過 0xFD 而出現亂碼。 關于這個問題,Keil 官方的回應是:0xfd、0xfe、0xff 這 3 個字符編碼被 Keil 編譯器內部使用,所 以代碼中若包含有 0xfd 的字符串時,0xfd 會被編譯器自動跳過。 Keil 官方提供的解決方法:在帶有 0xfd 編碼的漢字后增加一個 0xfd 即可。例如: printf("數學"); //Keil 編譯后打印會顯示亂碼 printf("數\xfd 學"); //顯示正常 這里的“\xfd”是標準 C 代碼中的轉義字符,“\x”表示其后的 1~2 個字符為 16 進制數。“\xfd”表 示將 16 進制數 0xfd 插入到字符串中。 由于“數”的漢字編碼是 0xCAFD,Keil 在編譯時會將 FD 跳過,而只將 CA 編譯到目標文件中,后 面通過轉義字符手動再補一個 0xfd 到目標文件中,就形成完整的 0xCAFD,從而可正常顯示。 關于 0xFD 的補丁網上有很多,基本只對舊版本的 Keil 軟件有效。打補丁的方法均是在可執行文件 中查找關鍵代碼[80 FB FD],并修改為[80 FB FF],這種修改方法查找的關鍵代碼過于簡單,很容易修改 到其它無關的地方,導致編譯出來的目標文件運行時出現莫名其妙的問題。所以,代碼中的字符串有包 含如下的漢字時,建議使用 Keil 官方提供的解決方法進行解決 GB2312 中,包含 0xfd 編碼的漢字如下: 褒餅昌除待諜洱俘庚過糊積箭燼君魁 例籠慢謬凝琵訖驅三升數她聽妄錫淆 旋妖引育札正鑄 佚冽邶埤犖蔟摭啐 幘獫愷泯潺嫗紈琮槧輦挲臊忑睚銓稞 瘕頎螨籪酏觚鳊鼾 另外,Keil 項目路徑名的字符中也不能含有帶 0xFD 編碼的漢字,否則 Keil 軟件會無法正確編譯此 項目。 |
跪謝 已解決 大神牛逼 |
學習了,我就說為什么我的漢字一直顯示出錯。 |
hp34401a 發表于 2018-5-26 09:52 清測有效,Keil版本V952 |
也發現這個問題了。 臨時解決的辦法:把漢字編碼的2個字節,單獨寫到數組。 比如: mystr[0] = 0xCA; // '數'的GBK內碼: 0xcafd --> 因keil編譯有錯誤,所以用hex方式 mystr[1] = 0xFD; 不過這個只能算補救方法。 |
不錯,測試OK |
hp34401a 發表于 2018-5-26 09:52 感謝分享,這個的確好用,解決了困擾我很久的問題。 |
用keil在使用漢字時有時會出現顯示亂碼,官方說明是有些漢字內碼包含0xfd,可以通過加在該漢字后加0xfd解決,不過很麻煩,有了0xfd補丁就可以很好的解決這個問題。 |
hp34401a 發表于 2018-5-26 09:52 謝謝樓主,現在顯示正常了。 |
51hei圖片_20220119185337.jpg (122.23 KB, 下載次數: 369)
20220120171010.jpg (137.13 KB, 下載次數: 325)
我的這個好像不行,還是亂碼。 |
“正”字遇到了這個問題,都2021年了,這個問題還是存在![]() |
昨天出現了這個情況,用這個補丁解決了問題,謝謝樓主了 |
hp34401a 發表于 2018-5-26 09:52 測試可用,早發現這個補丁就好了 |
謝謝你,剛剛執行了,秀出成功的信息。 |
十分感謝,新KEIL C51 0XFD補丁很好用,舊版在我這里沒有用,新版的可以。![]() |
admin 發表于 2010-7-22 04:45 我整了一下午了,我就沒想到是編譯器的問題,淦,感謝感謝 |
感謝大佬,雖然我來晚了10年。這個真的是聽君一席話,勝讀十年書。 |
感謝感謝,我也碰三顯示不出來的問題了,昨晚弄了一個晚上,打了補丁當場好了。 |
感謝你的無私,我今天也碰到亂碼了 |
還是可以,很棒 |
hp34401a 發表于 2018-5-26 09:52 多謝多謝 |
學習KEIL C51 0XFD補丁 |
新KEIL C51 0XFD補丁。支持KEIL5 及以下所有版本! |
我的頁無法打補丁啊愛愛愛 |
hp34401a 發表于 2018-5-26 09:52 新KEIL C51 0XFD補丁。支持KEIL5 及以下所有版本! |
在哪呢 |
![]() ![]() ![]() "飛流直下三千尺," “正弦波”(“三”“正”字顯示亂碼。)弄了好久都解決不了,現在終于在這里找到了解決方法。謝謝樓主與各位網友! |
hp34401a 發表于 2018-5-26 09:52 感謝你的無私,我今天也碰到亂碼了 |
昨天下載測試了,我的keil3問題還是解決不了,今天下載了一個keil4 |
DSCX05 發表于 2018-8-18 18:34 下載試試看行不行?我有一個液晶屏顯示“過”字不行,按照管方解決辦法加\xFD都沒有能解決正常顯示,后在“過”字后加\x00才正常顯示的,后又有一個“山”字不能正常顯示,字后加什么都不行了,用了修復補丁也不行,只修復了“過”字顯示的問題,“山”字的顯示始終不行哎!今天在下載這個補丁試試看吧! |
hp34401a 發表于 2018-5-26 09:52 好用。。。。。。 |
新KEIL C51 0XFD補丁。支持KEIL5 及以下所有版本! |
keilfdfix2.JPG (53.83 KB, 下載次數: 276)
keil_v5_fixed1.jpg (144.25 KB, 下載次數: 246)
keilfdfix3.JPG (120.68 KB, 下載次數: 197)
VirusTotalA.jpg (193.81 KB, 下載次數: 190)
96.6 KB, 下載次數: 364, 下載積分: 黑幣 -5
sglf0201 發表于 2015-5-3 14:39 我也這樣 請問怎么解決的呀 |
keil漢字補丁能否給我份 |
keil漢字補丁能否給我份 |
admin 發表于 2010-7-22 04:45 感謝分享 |
這個方法很好用。多謝! |
admin 發表于 2010-7-22 04:45 為什么我下了補丁仍然顯示亂碼,求大神指教 |
怎么我下載了補丁還是顯示亂碼?求大神們指教 |