主题:请问这是用什么算法算出来的?
ccdy525
[专家分:0] 发布于 2006-08-04 19:24:00
B6D3变成3D29是用什么算法算出来的啊?
我是新手,什么都不懂,请各位多多帮助,谢谢!
回复列表 (共1个回复)
沙发
euc [专家分:4310] 发布于 2006-08-05 12:55:00
[转]:http://fanqiang.chinaunix.net/program/php/2005-07-06/3373.shtml
/////////////////////////////////////////////////////////////////////
//这是php的代码。 utf8转unicode的方法:
function utf8_unicode($c) {
switch(strlen($c)) {
case 1:
return ord($c); //ord()在这里就是返回字符的ascii码
case 2:
$n = (ord($c[0]) & 0x3f) << 6;
$n += ord($c[1]) & 0x3f; //只取低6位,然后颠倒合并
return $n;
case 3:
$n = (ord($c[0]) & 0x1f) << 12; //只取低5位
$n += (ord($c[1]) & 0x3f) << 6;
$n += ord($c[2]) & 0x3f;
return $n;
case 4:
$n = (ord($c[0]) & 0x0f) << 18; //低4位
$n += (ord($c[1]) & 0x3f) << 12;
$n += (ord($c[2]) & 0x3f) << 6;
$n += ord($c[3]) & 0x3f;
return $n;
}
}
////////////////////////////////////////////
//utf-8转GB2312的方法:
function u2utf82gb($c){
$str="";
if ($c < 0x80) {
$str.=$c; //".="是字符串连接符
} else if ($c < 0x800) { //如果是两位
$str.=chr(0xC0 | $c>>6); //高两位补1 //chr()反回ascii数字对应的字符;
$str.=chr(0x80 | $c & 0x3F); //提取第一个字符后最高位补1
} else if ($c < 0x10000) {
$str.=chr(0xE0 | $c>>12); //高3位补1;以下同理
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
$str.=chr(0xF0 | $c>>18);
$str.=chr(0x80 | $c>>12 & 0x3F);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return iconv('UTF-8', 'GB2312', $str);
}
///////////////////////////////////////////////
感觉两个方法是相反的过程。
我来回复