PHP 中关于ord($str)>0x80的详细说明
发布时间:2020-12-13 06:10:39 所属栏目:PHP教程 来源:网络整理
导读:GBK简体字符集的编码是同时用1个字节和2个字节来表示的。当高位是0x00~0x7f时,为一个字节,高位为0x80以上时用2个字节表示" 注:括号里面都是2进制 当你发现一个字节的内容大于0x7f,那它肯定是个(跟另外一个字节拼凑成一个)汉字,如何判断肯定大于0x7f呢? 0x
GBK简体字符集的编码是同时用1个字节和2个字节来表示的。当高位是0x00~0x7f时,为一个字节,高位为0x80以上时用2个字节表示" 注:括号里面都是2进制当你发现一个字节的内容大于0x7f,那它肯定是个(跟另外一个字节拼凑成一个)汉字,如何判断肯定大于0x7f呢?0x7f(2222211)后面一个数就是0x80(10000000),所以想要大于0x7f,这个字节的最高位都肯定是1,我们只需要判断这个最高位是否为1就行了。 判断方法:位与(相同的位都是1的才为1,否则为0):如:要判断一个数的第三位是否是1,只要跟4(100)位与,判断一个数的第2位是否为1就跟2(10)位与. 同理判断第八位是否为1只要跟(10000000)也就是0x80位与了. 这里为什么不用>0x7f,php可能还行,但在其他强类型语言里面,1个字节的最高位用来标示负数,一个负数肯定不可能大于0x7f(最大的整数) 再举个例子: a的assic码是97(1100001) A的assic码是65(1000001) b的assic码是98(1100010) b的assic码是66(1000010) 发现一个规律:一个a-z的字母,只要是小写字母,第六位肯定是1,我们可以用这个来判断大小写: 这时候只要跟用以个字母跟0x20(100000)来位与判断: <div class="codetitle"><a style="CURSOR: pointer" data="34252" class="copybut" id="copybut34252" onclick="doCopy('code34252')"> 代码如下:<div class="codebody" id="code34252"> if(ord($a)&0x20){ //大写 } 如何把所有字母改成大写?第六位的1改成0就行了: <div class="codetitle"><a style="CURSOR: pointer" data="25966" class="copybut" id="copybut25966" onclick="doCopy('code25966')"> 代码如下:<div class="codebody" id="code25966"> $a='a'; $a = chr(ord($a)&(~0x20)); echo $a; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |