關于iOS 藍牙 字庫 發(fā)送16*16漢字點陣取模相關問題(一)

在與硬件的藍牙通訊過程中,硬件需要手機端發(fā)送16*16的漢字點陣過去导帝,用于硬件直接顯示漢字路狮。這里采用的是通用的HZK16(宋體)漢字

原理

1.HZK16字庫是符合GB2312國家標準的16×16點陣字庫,HZK16的GB2312-80支持的漢字有6763個,符號682個。其中一級漢字有 3755個,按聲序排列拭宁,二級漢字有3008個,按偏旁部首排列瓣俯。

我們在一些應用場合根本用不到這么多漢字字模杰标,所以在應用時就可以只提取部分字體作為己用。 HZK16字庫里的16×16漢字一共需要256個點來顯示彩匕,也就是說需要32個字節(jié)才能達到顯示一個普通漢字的目的腔剂。

我們知道一個GB2312漢字是由兩個字節(jié)編碼的,范圍為0xA1A1~0xFEFE驼仪。A1-A9為符號區(qū)掸犬,B0-F7為漢字區(qū)袜漩。每一個區(qū)有94個字符(注意:這只是編碼的許可范圍,不一定都有字型對應湾碎,比如符號區(qū)就有很多編碼空白區(qū)域)宙攻。

下面以漢字「我」為例,介紹如何在HZK16文件中找到它對應的32個字節(jié)的字模數(shù)據(jù)介褥。

前面說到一個漢字占兩個字節(jié)座掘,這兩個中前一個字節(jié)為該漢字的區(qū)號,后一個字節(jié)為該字的位號呻顽。其中雹顺,每個區(qū)記錄94個漢字,位號為該字在該區(qū)中的位置廊遍。所以要找到「我」在hzk16庫中的位置就必須得到它的區(qū)碼和位碼。

區(qū)碼:漢字的第一個字節(jié)-0xA0贩挣,因為漢字編碼是從0xA0區(qū)開始的喉前,所以文件最前面就是從0xA0區(qū)開始,要算出相對區(qū)碼

位碼:漢字的第二個字節(jié)-0xA0

這樣我們就可以得到漢字在HZK16中的絕對偏移位置:offset = (94*(區(qū)碼-1)+(位碼-1))*32王财。

注解:

區(qū)碼減1是因為數(shù)組是以0為開始而區(qū)號位號是以1為開始的

(94*(區(qū)號-1)+位號-1)是一個漢字字模占用的字節(jié)數(shù)

最后乘以32是因為漢字庫文應從該位置起的32字節(jié)信息記錄該字的字模信息(前面提到一個漢字要有32個字節(jié)顯示)


“我”字的圖示

以上是摘抄自HZK16漢字16*16點陣字庫的使用及示例程序 - 陪她去流浪

下面開始說明手機端如何發(fā)送(這里已OC為例卵迂,其他語言可自行進行修改)

首先需要先將UTF-8編碼轉換成 cp936 編碼,然后才能正確地索引字庫中的漢字绒净。

-(Byte *)convertStringToGBKStr:(NSString *)str{? ?

//轉換成UTF-8? ?

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);? ? NSData *data = [str dataUsingEncoding: enc];? ? Byte * bytes = (Byte *)[data bytes];? ? return bytes;

}


首先要確定硬件那邊的取模方式


一般的取模方式

下面的方法執(zhí)行完之后 會打印出來二進制 橫向掃描的0见咒,1的點陣

注意:這個0.1點陣字節(jié)為正序的。而實際硬件需要的字節(jié)需要倒序

- (void)sendText:(NSString *)str{?? ??? ?? ?

FILE* fphzk = NULL;?

? int offset;? ?

unsigned char buffer[32];? ?

unsigned char key[8] = { 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 };? ?

unsigned char word[3]; // 改成你的轉碼后的漢字編碼//? ?

? ?//文件路徑? ?

NSString *path = [[NSBundle mainBundle] pathForResource:@"HZK16" ofType:@""];? ? fphzk = fopen(path.UTF8String, "rb");?

? if(fphzk == NULL){? ? ?

? fprintf(stderr, "error hzk16\n");? ? ? ?

return;?

? }? ?

? ? ? ?//循環(huán)解碼? ?

NSMutableString *sendStr = [NSMutableString string];?

?for (int i=0; i<str.length; i++) {?? ? ? ?? ? ? ?

NSString *endStr = [str substringWithRange:NSMakeRange(i, 1)];? ?

?Byte *bytes = [self convertStringToGBKStr:endStr];? ? ? ? //漢字ascii編碼? ? ? ? //0xCE, 0xD2? ? ? ?

word[0] = bytes[0];? ? ?

word[1] = bytes[1];? ? ? ?

offset = (94*(unsigned int)(word[0]-0xa0-1)+(word[1]-0xa0-1))*32;? ?

fseek(fphzk, offset, SEEK_SET);? ? ? ?

fread(buffer, 1, 32, fphzk);? ? ?

for(k=0; k<16; k++){?

for(j=0; j<2; j++){?

? ?for(i=0; i<8; i++){?

? ? ? flag = buffer[k*2+j]&key[i];?

? ? ? printf("%s", flag?"1":"0");?

? ? ?}?

}?

printf("\n");?

? ? }

fclose(fphzk);

fphzk = NULL;

}

更多關于手機端發(fā)送16*16漢字點陣取模相關問題(二) - 簡書


最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挂疆,一起剝皮案震驚了整個濱河市改览,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缤言,老刑警劉巖宝当,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胆萧,居然都是意外死亡庆揩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門跌穗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來订晌,“玉大人,你說我怎么就攤上這事蚌吸⌒獠Γ” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵套利,是天一觀的道長推励。 經(jīng)常有香客問我鹤耍,道長,這世上最難降的妖魔是什么验辞? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任稿黄,我火速辦了婚禮,結果婚禮上跌造,老公的妹妹穿的比我還像新娘杆怕。我一直安慰自己,他們只是感情好壳贪,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布陵珍。 她就那樣靜靜地躺著,像睡著了一般违施。 火紅的嫁衣襯著肌膚如雪互纯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天磕蒲,我揣著相機與錄音留潦,去河邊找鬼。 笑死辣往,一個胖子當著我的面吹牛兔院,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播站削,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼坊萝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了许起?” 一聲冷哼從身側響起十偶,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎街氢,沒想到半個月后扯键,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡珊肃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年荣刑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伦乔。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡厉亏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烈和,到底是詐尸還是另有隱情爱只,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布招刹,位于F島的核電站恬试,受9級特大地震影響窝趣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜训柴,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一哑舒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幻馁,春花似錦洗鸵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稀拐,卻和暖如春火邓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背德撬。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工贡翘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砰逻。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像泛鸟,于是被迫代替她去往敵國和親蝠咆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348