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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4133|回復: 13
收起左側

單片機C語言printf中文字符串亂碼 求助

[復制鏈接]
ID:1025655 發表于 2022-5-17 16:00 | 顯示全部樓層 |閱讀模式
代碼部分
while(1)
        {
        printf("系統初始化正常 hello word : %u\r\n",Cnt++);


串口輸出部分
系統初始化粘?hello word : 1
系統初始化粘?hello word : 2
系統初始化粘?hello word : 3
系統初始化粘?hello word : 4
系統初始化粘?hello word : 5
系統初始化粘?hello word : 6
系統初始化粘?hello word : 7
?低吵跏薊常 hello word : 8
系?吵跏薊常 hello word : 9
系統初始化粘?hello word : 10
系統初始化粘?hello word : 11
系統初?薊常 hello word : 12
系統初始化粘?hello word : 13
系統初始?常 hello word : 14
系統初始化粘?hello word : 15
系統初始化?常 hello word : 16
系統初始化粘?hello word : 17
系統初始化粘? hello word : 18
系統初始化粘?hello word : 19
系統初始化粘?hello word : 20
系統初始化粘?hello word : 21
系統初始化粘?hello word : 22
系統初始化粘?hello word : 23
系統初始化粘?hello word : 24
系統初始化粘?hello word : 25
系統初始化粘?hello word : 26
系統初始化粘?hello word : 27
系統初始化粘?hello word : 28
系統初始化粘?hello word : 29
系統初始化粘?hello word : 30
系統初始化粘?hello word : 31
系統初始化粘?hello word : 32
系統初始化粘?hello word : 33
系統初始化粘?hello word : 34
系統初始化粘?hello word : 35
系統初始化粘?hello word : 36
系統初始化粘?hello word : 37
?低吵跏薊常 hello word : 38
系統初始化粘?hello word : 39
系統初始化粘?hello word : 40
系統初始化粘?hello word : 41
系統初始化粘?hello word : 42
系統初始化粘?hello word : 43
系統初始化粘?hello word : 44
系統初始化粘?hello word : 45
系統初始?常 hello word : 46
系統初始化粘?hello word : 47
系統初始化?常 hello word : 48
系統初始化粘?hello word : 49
系統初始化粘? hello word : 50
系統初始化粘?hello word : 51
系統初始化粘?hello word : 52
系統初始化粘?hello word : 53
系統初始化粘?hello word : 54
系統初始化粘?hello word : 55
系統初始化粘?hello word : 56
系統初始化粘?hello word : 57
系統初始化粘?hello word : 58
系統初始化粘?hello word : 59
系統初始化粘?hello word : 60
系統初始化粘?hello word : 61
系統初始化粘?hello word : 62
系統初始化粘?hello word : 63
系統初始化粘?hello word : 64
系統初始化粘?hello word : 65
系統初始化粘?hello word : 66
系統初始化粘?hello word : 67
系統初始化粘?hello word : 68
系統初始化粘?hello word : 69
?低吵跏薊常 hello word : 70
系統初始化粘?hello word : 71
系?吵跏薊常 hello word : 72
系統初始化粘?hello word : 73
系統初始化粘?hello word : 74
系統初始化粘?hello word : 75
系統初始化粘?hello word : 76
系統初始化粘?hello word : 77
系統初始?常 hello word : 78
系統初始化粘?hello word : 79
系統初始化?常 hello word : 80
系統初始化粘?hello word : 81
系統初始化粘? hello word : 82
系統初始化粘?hello word : 83
系統初始化粘?hello word : 84
系統初始化粘?hello word : 85
系統初始化粘?hello word : 86
系統初始化粘?hello word : 87
系統初始化粘?hello word : 88
系統初始化粘?hello word : 89
系統初始化粘?hello word : 90
系統初始化粘?hello word : 91
系統初始化粘?hello word : 92
系統初始化粘?hello word : 93
系統初始化粘?hello word : 94
系統初始化粘?hello word : 95
系統初始化粘?hello word : 96
系統初始化粘?hello word : 97
系統初始化粘?hello word : 98
系統初始化粘?hello word : 99
系統初始化粘?hello word : 100
系統初始化粘?hello word : 101

回復

使用道具 舉報

ID:883242 發表于 2022-5-17 16:41 | 顯示全部樓層
“正”漢字編碼0xd5、0xfd,你這是遇到了C51的0xfd問題,網上找個補丁修一下就行了。
回復

使用道具 舉報

ID:1026496 發表于 2022-5-17 21:38 | 顯示全部樓層
不建議printf 輸出中文如果要建議UTF8 的格式輸出。
回復

使用道具 舉報

ID:1027424 發表于 2022-5-17 22:04 | 顯示全部樓層
建議輸出英文或者換個串口助手,應該是解析中文最后一位的時候有問題
回復

使用道具 舉報

ID:939553 發表于 2022-5-17 22:59 | 顯示全部樓層
printf("系統初始化正\xfd常 hello word : %u\r\n",Cnt++);就可以了
回復

使用道具 舉報

ID:123289 發表于 2022-5-19 11:12 | 顯示全部樓層
函數會到漢字庫中去取數據,取到什么就顯示什么?
在取字模的過程序中,如果取字模的【索引】號錯了,或索引到的地址中的點陣錯了,就發生樓主遇到的問題了。
樓上的建議,或許有用。但希望你知道錯在哪里。
回復

使用道具 舉報

ID:883242 發表于 2022-5-19 15:05 | 顯示全部樓層
yzwzfyz 發表于 2022-5-19 11:12
函數會到漢字庫中去取數據,取到什么就顯示什么?
在取字模的過程序中,如果取字模的【索引】號錯了,或索 ...

在網上搜“C51的0xfd問題”對你來說就那么困難嗎?還要無理由的胡說八道。

就是C51的字符串中如果有漢字,而且漢字內碼有0xfd,C51編譯器會把0xfd吞掉,最后出來的代碼里面沒有0xfd自然就亂碼了。
回復

使用道具 舉報

ID:1004455 發表于 2022-5-19 23:14 | 顯示全部樓層
格式弄一下就可以了
回復

使用道具 舉報

ID:123289 發表于 2022-5-20 08:35 | 顯示全部樓層
打開printf看看,是不是用先用漢字是索引字庫,而后去取字模。
如果【C51編譯器會把0xfd吞掉】是平臺錯了,還是樓主錯了。
你如何證明,C51編譯器會把0xfd吞掉了呢?亮出來給樓主看看,也算是幫樓主了。
回復

使用道具 舉報

ID:883242 發表于 2022-5-20 09:41 | 顯示全部樓層
yzwzfyz 發表于 2022-5-20 08:35
打開printf看看,是不是用先用漢字是索引字庫,而后去取字模。
如果【C51編譯器會把0xfd吞掉】是平臺錯了 ...

在網上搜“C51的0xfd問題”對你來說就那么困難嗎?還要無理由的胡說八道。
回復

使用道具 舉報

ID:624769 發表于 2022-5-20 14:03 | 顯示全部樓層
如果:
        printf("系統初始化正常 hello word : %u\r\n",Cnt++);

換成:
       SendString("\r\n系統初始化正常 hello word : ");
        printf("%u",Cnt++);

是不會出現亂碼的。
所以,問題不在字符串,不在漢字,也不在編譯器,而是:
在明知KEIL C51 的 printf 不支持漢字,還非要用printf 發送漢字,就算沒有現成的SendString,自己寫一個
void SendString(char *p)
{
          while(*p)        SendUart(*p++);
}
就那么一句話的函數,很難么?
回復

使用道具 舉報

ID:883242 發表于 2022-5-20 15:01 | 顯示全部樓層
188610329 發表于 2022-5-20 14:03
如果:
        printf("系統初始化正常 hello word : %u\r\n",Cnt++);

大錯特錯了你!

SendString("\r\n系統初始化正常 hello word : ");
這句話也是不正常的。

問題的根源不是printf不支持漢字,而是Keil C51編譯器不支持字符串里面出現0xfd這個內碼。你的字符串里面一樣有這個內碼,一樣是不正常的,一樣會出現亂碼的。謙虛點兒吧你!
回復

使用道具 舉報

ID:1052053 發表于 2023-10-15 15:09 | 顯示全部樓層
printf支持漢字,Keil C51編譯器不支持字符串里面出現0xFD,剛開始遇到的時候也想不通,監測后才發現是這個問題,這應該算是keil的bug吧
回復

使用道具 舉報

ID:883242 發表于 2023-10-15 16:09 | 顯示全部樓層
spirit01 發表于 2023-10-15 15:09
printf支持漢字,Keil C51編譯器不支持字符串里面出現0xFD,剛開始遇到的時候也想不通,監測后才發現是這個 ...

這個0xfd問題我在1999年就發表在當時最火的C51BBS網站上,過了24年還沒有變,顯然不是bug而是feature。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表