OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7716|回复: 11

GBK转unicode不成功,跪求大神帮忙。

[复制链接]

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-6-6
在线时间
3 小时
发表于 2014-8-7 09:52:19 | 显示全部楼层 |阅读模式
5金钱
我把cc936.c里面的数组 转为unigbk.bin,直接放在SD卡,不经过外部FLASH储存。
其他函数经过验证,没发现问题,只是这里转码不成功,我也不知道是哪里错了。好人一生平安。
[mw_shl_code=c,true]WCHAR ff_convert ( /* Converted code, 0 means conversion error */ WCHAR src, /* Character code to be converted */ UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */ ) { WCHAR t[2]; WCHAR c; u8 buf[512]; u32 i, li, hi; u16 n; u32 gbk2uni_offset=0; u32 temp1=0; u32 temp2=0; u16 x=0; if (src < 0x80)c = src;//ASCII,直接不用转换. else { if(dir) //GBK 2 UNICODE { gbk2uni_offset=UGBKSIZE/2; }else //UNICODE 2 GBK { gbk2uni_offset=0; } /* Unicode to OEMCP */ hi=UGBKSIZE/2;//对半开. hi =hi / 4 - 1; li = 0; for (n = 16; n; n--) { i = li + (hi - li) / 2; temp1=i*4+gbk2uni_offset; temp2=temp1>>9;//相对于UGBKADDR偏移的扇区数 temp1=temp1-(temp2<<9);//在目标扇区偏移的位置 // SD_ReadBlocks(UGBKADDR+temp2,buf);//读取目标扇区(512B)的数据 SD_ReadDisk(buf,UGBKADDR+temp2,1); t[0]=(u16)buf[temp1]+(u16)(buf[temp1+1]<<8); t[1]=(u16)buf[temp1+2]+(u16)(buf[temp1+3]<<8); LCD_ShowNum(50,0+x,(u32)t[1],6,16);x+=16; if (src == t[0]) break; if (src > t[0])li = i; else hi = i; } c = n ? t[1] : 0; } return c; } [/mw_shl_code]



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-6-6
在线时间
3 小时
 楼主| 发表于 2014-8-7 16:24:51 | 显示全部楼层
顶上去。顶上去。顶上去。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-7 23:32:36 | 显示全部楼层
参考我们的例程.
我们的fatfs例程,就是这么做的,只是存放在SPI FLASH而已.你放SD卡.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-6-6
在线时间
3 小时
 楼主| 发表于 2014-8-7 23:38:24 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
你放在FLASH,不适合我用啊,我改成直接放在SD卡,参考你的修改了我的程序,但是不行,二分法16阶 最后求得的数 不对。
工程已上传,哪位大哥能帮我发现问题?

SD卡+FATFS.rar

2.23 MB, 下载次数: 313

回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-8-8 09:10:57 | 显示全部楼层
外部SPI Flash/SD卡没区别,跟你文件放硬盘或U盘一样。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-6-6
在线时间
3 小时
 楼主| 发表于 2014-8-8 13:31:18 | 显示全部楼层
回复【5楼】styleno1:
---------------------------------
我知道啊,但是程序不成功啊~~~ff_convert()写不好。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-8 23:30:30 | 显示全部楼层
回复【6楼】ElecUtopia:
---------------------------------
慢慢调试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-11-4 14:39:21 | 显示全部楼层
放到外部卡的回复【7楼】正点原子:
---------------------------------
放到外部SD卡的时候,我可以读出长文件名,比如歌曲“世界你好我好大家好.mp3”,但是我把获得的“世界你好我好大家好.mp3”这个字符串地址用文件系统打开,却报路径不对。
必须是“世界你好~1.MP3”才对。
~~!!
请问下原子哥,我用原来的CC936(带有数组)的就正确,但是移植到SD卡的就不对了
为什么啊
回复

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-11-4 14:39:52 | 显示全部楼层
[mw_shl_code=c,true]/*------------------------------------------------------------------------*/ /* Unicode - OEM code bidirectional converter (C)ChaN, 2009 */ /* */ /* CP936 (Simplified Chinese GBK) */ /*------------------------------------------------------------------------*/ #include "../ff.h" const char *OEMCP_to_unicode = "0:/system/font/oem2uni.bin"; const char *Unicode_to_OEMCP = "0:/system/font/uni2oem.bin"; #if !_USE_LFN || _CODE_PAGE != 936 #error This file is not needed in current configuration. Remove from the project. #endif WCHAR ff_convert ( /* Converted code, 0 means conversion error */ WCHAR chr, /* Character code to be converted */ UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */ ) { WCHAR p[2]; WCHAR c; int i, n, li, hi; FIL fp; UINT s[4]; if (chr < 0x80) { /* ASCII */ c = chr; } else { if (dir) { /* OEMCP to unicode */ f_open(&fp,OEMCP_to_unicode,FA_READ); } else { /* Unicode to OEMCP */ f_open(&fp,Unicode_to_OEMCP,FA_READ); } hi = fp.fsize/4; li = 0; for (n = 16; n; n--) { i = li + (hi - li) / 2; f_lseek(&fp,i*4); f_read(&fp,p,4,s); if (chr == p[0]) break; if (chr > p[0]) li = i; else hi = i; } c = n ? p[1] : 0; f_close(&fp); } return c; } WCHAR ff_wtoupper ( /* Upper converted character */ WCHAR chr /* Input character */ ) { static const WCHAR tbl_lower[] = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0xA1, 0x00A2, 0x00A3, 0x00A5, 0x00AC, 0x00AF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x0FF, 0x101, 0x103, 0x105, 0x107, 0x109, 0x10B, 0x10D, 0x10F, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11B, 0x11D, 0x11F, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12B, 0x12D, 0x12F, 0x131, 0x133, 0x135, 0x137, 0x13A, 0x13C, 0x13E, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14B, 0x14D, 0x14F, 0x151, 0x153, 0x155, 0x157, 0x159, 0x15B, 0x15D, 0x15F, 0x161, 0x163, 0x165, 0x167, 0x169, 0x16B, 0x16D, 0x16F, 0x171, 0x173, 0x175, 0x177, 0x17A, 0x17C, 0x17E, 0x192, 0x3B1, 0x3B2, 0x3B3, 0x3B4, 0x3B5, 0x3B6, 0x3B7, 0x3B8, 0x3B9, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BE, 0x3BF, 0x3C0, 0x3C1, 0x3C3, 0x3C4, 0x3C5, 0x3C6, 0x3C7, 0x3C8, 0x3C9, 0x3CA, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, 0x43F, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45A, 0x45B, 0x45C, 0x45E, 0x45F, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x217C, 0x217D, 0x217E, 0x217F, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0 }; static const WCHAR tbl_upper[] = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x21, 0xFFE0, 0xFFE1, 0xFFE5, 0xFFE2, 0xFFE3, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0x178, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134, 0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147, 0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, 0x170, 0x172, 0x174, 0x176, 0x179, 0x17B, 0x17D, 0x191, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39A, 0x39B, 0x39C, 0x39D, 0x39E, 0x39F, 0x3A0, 0x3A1, 0x3A3, 0x3A4, 0x3A5, 0x3A6, 0x3A7, 0x3A8, 0x3A9, 0x3AA, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, 0x42F, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40A, 0x40B, 0x40C, 0x40E, 0x40F, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 0x216C, 0x216D, 0x216E, 0x216F, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0 }; int i; for (i = 0; tbl_lower && chr != tbl_lower; i++) ; return tbl_lower ? tbl_upper : chr; } [/mw_shl_code]

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-4 22:59:25 | 显示全部楼层
回复【8楼】SCREA:
---------------------------------
说明你的移植还有问题,得慢慢查。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

0

帖子

0

精华

等待验证会员

积分
44
金钱
44
注册时间
2019-4-9
在线时间
16 小时
发表于 2016-12-28 15:26:25 | 显示全部楼层
遇到同样问题,不知道楼主解决了么?
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-5-7
在线时间
1 小时
发表于 2018-5-20 19:32:56 | 显示全部楼层
SCREA 发表于 2014-11-4 14:39
[mw_shl_code=c,true]/*------------------------------------------------------------------------*/
...

功能实现了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-17 08:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表