2008年2月20日 星期三

已知中文字型在Big5的順序,反推出 Big5

由以下中文 Big5 順序公式可反推

//高位元區段 81-8D 8E-A0 A1-FE ---->126個
//低位元區段 40-7E A1-FE ---> 157 個
//先計算高位元的距離 公式:(高位元 - 0x81) * 157
//再計算低位元距離 分為兩組 40-7E A1-FE
//0x40=64 0x7E=126 63個
//0xA1=161 0xFE=254 94個
//落在 0x40-0x7E 直接加上 (低位元的值 - 0x40 + 1)
//落在 0xA1-0xFE 63 + (低位元的值 - 0xA1 + 1)

$big5order --> Big5順序

$temp1 = $big5order / 157 的餘數

$temp2 = $big5order / 157 的商

若餘數為 0 ==> Big5 高位元為 $temp2 -1 + 0x81 低位元為 0xFE

若餘數為 小於 64 ==> Big5 高位元為 $temp2 + 0x81 低位元為 $temp + 0x40 - 1

若餘數為 大於64 ==> Big5 高位元為 $temp2 + 0x81 低位元為 $temp -63 + 0xA1 - 1

<?php

$temp = ($big5order%157);
$hicode = (int)($big5order/157) + 0x81;
if($temp==0){
$hicode = $hicode - 1;
$locode = 0xFE;
} else if($temp < 64) $locode = $temp + 0x40 - 1;
else $locode = $temp - 63 + 0xA1 - 1;

?>

沒有留言: