GBK 簡体字セットのエンコーディングは 1 バイトと 2 バイトの両方で表されます。上位ビットが 0x00 ~ 0x7f の場合は 1 バイト、上位ビットが 0x80 以上の場合は 2 バイトで表されます。 注: 括弧内はすべてバイナリ
です。
バイトの内容が 0x7f より大きいことがわかった場合、それは (別のバイトと結合された) 漢字である必要があります。 0x7f (1111111) の後の数値は 0x80 (10000000) ) なので、0x7f より大きくしたい場合は、このバイトの最上位ビットは 1 でなければなりません。最上位ビットが 1 であるかどうかを判断するだけで済みます。
判定方法:
ビットごとの AND (同じビットがすべて 1 なら 1、それ以外は 0): 例: の 3 桁目かどうかを判定します。数値が 1 である場合は、4 (100) 個のビット単位の AND をたどって 1 を判定します。数値の 2 桁目が 1 かどうかを判定するには、2(10) ビットの AND をたどるだけです。
同様に、8 桁目かどうかを判定します。
ここで使用しないのは 1 です。(10000000) は 0x80 ビットの AND です。PHP では問題ないかもしれませんが、他の厳密に型指定された言語では最上位ビットが 1 バイトになります。負の数値をマークするために使用されます。負の数値は 0x7f (最大の整数) より大きくすることはできません。
別の例 例:
a の ASSIC コードは 97 (1100001)
ASSIC コードA の A は 65 (1000001)
b の ASSIC コードは 98 (1100010)
B の ASIC コードは 66 (1000010)
ルールが見つかりました: a である限りa-z の文字は小文字で、6 桁目は 1 である必要があります。これを使用して大文字と小文字を判断できます。
現時点では、その後に文字が続くだけです。0x20 (100000) に従って、次のように判断します。
コードをコピー
コードは次のとおりです: if(ord($a)&0x20 ){
//Capital}
すべての文字を大文字に変更するには、6 番目の位置の 1 を 0 に変更するだけです:
コードは次のとおりです。 $a='a'
$a = chr(ord($a)&(~0x20));