回 帖 发 新 帖 刷新版面

主题:请问这是用什么算法算出来的?

B6D3变成3D29是用什么算法算出来的啊?
我是新手,什么都不懂,请各位多多帮助,谢谢!

回复列表 (共1个回复)

沙发

[转]: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);
}
///////////////////////////////////////////////
感觉两个方法是相反的过程。

我来回复

您尚未登录,请登录后再回复。点此登录或注册