エンコーディングを研究した後、GB2312エンコーディングとロケーションコードの関係を学びました。試した後、このプログラムを取得しました。
検索、誰もそれを書いていないようだったので、私はそれをここに投稿しました。
オリジナルの最初のリリース:
http://bbs.blueidea.com
http://mytju.com/classcode/
いつでも転載して、いつでも使用してください。
1。簡単な説明
(1)GB2312標準の定義は、実際にはロケーションコードです。
合計94行、94列、行はエリアコード、列はビット番号です。
たとえば、文字「AH」の市外局番は16で、ビット数は01で、その位置コードは1601です。
(2)各文字は、市外局番 +ビット番号で構成され、合計2バイトを占めています。
各バイトは01-94で、通信コントローラー0-31と競合します。
したがって、競合を避けるために、それぞれ市外局番とビット番号32を追加します。
(3)上記から、各バイトは33-126であり、0-127をコードするASCIIと矛盾しています。
したがって、最高の位置を1に置くこと、つまり競合を避けるために128を追加します。
したがって、最終的には、各バイトは161-254です。
2。達成します
原則は非常に単純で、追加または減算です。
ここで完了した関数を直接投稿します。
コードコピーは次のとおりです。
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
functionchartoqwm(byvalstr)
dimshex、shigh、slow、ilow、ihigh、sresult
shex = hex(asc(str)) 'b0a1などの文字の内部コードのエンコードを取得すると、このエンコードは正しい順序であり、高および低ビットを交換する必要はありません。
shigh = left(shex、2) 'b0などのエンコードされたハイビットを取得します。
slow = right(shex、2) '' a1などのエンコードが低いビットを取得します。
'gb2312内部コード範囲は&ha1a1-&hfefeであり、各バイトはa1-feの間です。
ifnot(shigh> = "a1" andshige <= "fe")
chartoqwm = ""
exitFunction
endif
ifnot(slow> = "a1" andslow <= "fe")then
chartoqwm = ""
exitFunction
endif
'GB Exchangeコードは7ビットのみを使用し、高い位置は1で、これが内部コードです。次に、高い位置は0であり、スワップコードを取得できます。
ilow = clng( "&h"&slow)-128
ihigh = clng( "&h"&shigh)-128
「ロケーションコードはコントロールコード0-31と競合するため、32を追加した後、交換コードが1つです。次に、32を減算します。
ilow = ilow-32
ihigh = ihigh-32
「OK、ロケーションコードが取得されました。
sResult = ""
ifihigh <10then
sResult = sResult& "0"&cstr(ihigh)
それ以外