提醒:在這里要首先明白取模方向是什么意思俗冻。下面列舉下取模放向及實(shí)例
與上圖“我”字對(duì)應(yīng) 這種取模后取值為 00000100 10000000 00001110 10100000.。根竿。嗽冒。以此類推
但是發(fā)送給硬件需要倒敘即為? 00100000 00000001 01110000 00000101.礁扮。陨亡。依次類推
只要注意掃描方式跟0,1陣的關(guān)系就很容易理解。這種掃描即為 00000100 00100100.深员。。 按照0,1陣方向取值
同樣需要倒敘
下面引入下面這種掃描發(fā)送的代碼蛙埂,因?yàn)轫?xiàng)目用到的是這種倦畅,其他種都可以按此思路進(jìn)行編寫
- (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]; // 改成你的轉(zhuǎn)碼后的漢字編碼//? ?
//文件路徑? ? NSString *path = [[NSBundle mainBundle] pathForResource:@"HZK16" ofType:@""];? ?
fphzk = fopen(path.UTF8String, "rb");? ? ?
if(fphzk == NULL){? ? ? ?
fprintf(stderr, "error hzk16\n");? ? ? ?
return;? ?
}? ? ? ? ? ? ?
//循環(huán)解碼? ? --》因?yàn)榭赡苁嵌鄠€(gè)漢字
NSMutableString *sendStr = [NSMutableString string];//? ?
NSMutableString *twoSendStr = [NSMutableString string];? ?
for (int i=0; i<str.length; i++) {?? ? ? ?? ? ? ?
NSString *endStr = [str substringWithRange:NSMakeRange(i, 1)];? ? ? ?
Byte *bytes = [self convertStringToGBKStr:endStr];? ? ? ? //漢字ascii編碼?
?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);? ? ? ?
NSMutableArray<NSArray *> *ary = [NSMutableArray array];? ? ? ?
for(int k=0; k<16; k++){? ? ? ? ? ?
NSMutableArray<NSString *> *str = [NSMutableArray array];? ? ? ? ? ?
for(int j=0; j<2; j++){? ? ? ? ? ? ? ?
for(int i=0; i<8; i++){? ? ? ? ? ? ? ? ? ?
int flag = buffer[k*2+j]&key[i];? ? ? ? ? ? ? ? ? ?
printf("%s", flag?"1":"0");? ? ? ? ? ? ? ? ? ?
[str addObject:flag?@"1":@"0"];? ? ? ? ? ? ? ?
}? ? ? ? ? ?
}? ? ? ? ? ?
printf("\n");? ? ? ? ? ?
[ary addObject:str];? ? ? ?
}? ? ? ?
//開始處理取模方式? ?--》在這里進(jìn)行掃描以及取模的計(jì)算? ? ??
NSMutableString *overStr = [NSMutableString string];? ? ? ?
for (int i = 0; i < 16; i ++) {? ? ? ? ? ?
NSMutableString *newStr = [NSMutableString string];? ? ? ? ? ?
for (int j = 0; j < 8; j ++) {? ? ? ? ? ? ? ?
NSArray *strArr = ary[7-j];? ? ? ? ? ? ? ?
[newStr appendFormat:@"%@",strArr[i]];? ? ? ? ? ?
}? ? ? ? ? ?
[overStr appendFormat:@"%@",[self getHexByBinary:newStr]];? ? ? ?
}? ? ? ?
for (int i = 0; i < 16; i ++) {? ? ? ? ? ?
NSMutableString *newStr = [NSMutableString string];? ? ? ? ? ?
for (int j = 0; j < 8; j ++) {? ? ? ? ? ? ? ?
NSArray *strArr = ary[15-j];? ? ? ? ? ? ? ?
[newStr appendFormat:@"%@",strArr[i]];? ? ? ? ? ?
}? ? ? ? ? ?
[overStr appendFormat:@"%@",[self getHexByBinary:newStr]];? ? ? ?
}? ? ? ?
NSLog(@"最終輸出的自處穿%@",overStr);? ? ? ?
[sendStr appendString:overStr];? ?
}? ?
fclose(fphzk);? ?
fphzk = NULL;
//在這里得到的sendStr即為按該中方式取模后的十六進(jìn)制字符串
}
可以根據(jù)不同需求對(duì)方法進(jìn)行修改。因?yàn)橄胍壿嫼?jiǎn)單 所以沒有對(duì)代碼進(jìn)行優(yōu)化绣的,方面理解叠赐。