将utf-8格式的汉字转换成16进制

//字符串转换成16进制
function str2hex($str){
    $hex = '';
    for($i=0,$length=mb_strlen($str); $i<$length; $i++){
        $hex .= dechex(ord($str{$i}));
    }
    return $hex;
}
//16进制转换成字符串
function hex2str($hex){
    $str = '';
    $arr = str_split($hex, 2);
    foreach($arr as $bit){
        $str .= chr(hexdec($bit));
    }
    return $str;
}
function test(){
    //utf8字符测试
    $str = '中文';
    echo mb_strlen($str);
    echo '';
            
    $hex = str2hex($str);
    echo $hex;
    echo '';
            
    $dec = hex2str($hex);
    echo $dec;
    echo "";
    echo "<hr>";
    //gbk测试
    $gbkstr = mb_convert_encoding($str,'GBK','UTF-8');
    echo mb_strlen($gbkstr);
    echo '';
            
    $hex = str2hex($gbkstr);
    echo $hex;
    echo '';
        
    $dec = mb_convert_encoding(hex2str($hex), 'UTF-8', 'GBK');
    echo $dec;
    echo "";
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中,可以使用以下代码将 16 UTF-8 编码转换为 GB18030 编码: ```java import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetDecoder; import java.nio.ByteBuffer; import java.nio.CharBuffer; public class HexToGB18030 { public static void main(String[] args) { String hexStr = "E4B8ADE59BBD"; // UTF-8 编码的汉字 "中国" // 将 16 字符串转换为字节数组 byte[] utf8Bytes = new byte[hexStr.length() / 2]; for (int i = 0; i < utf8Bytes.length; i++) { utf8Bytes[i] = (byte) Integer.parseInt(hexStr.substring(i * 2, i * 2 + 2), 16); } // 将 UTF-8 编码的字节数组转换为字符数组 Charset utf8Charset = StandardCharsets.UTF_8; CharsetDecoder utf8Decoder = utf8Charset.newDecoder(); ByteBuffer utf8Buffer = ByteBuffer.wrap(utf8Bytes); CharBuffer utf8CharBuffer = null; try { utf8CharBuffer = utf8Decoder.decode(utf8Buffer); } catch (Exception e) { e.printStackTrace(); } char[] utf8Chars = utf8CharBuffer.array(); // 将字符数组转换为 GB18030 编码的字节数组 Charset gbCharset = Charset.forName("GB18030"); CharsetEncoder gbEncoder = gbCharset.newEncoder(); ByteBuffer gbBuffer = null; try { gbBuffer = gbEncoder.encode(CharBuffer.wrap(utf8Chars)); } catch (Exception e) { e.printStackTrace(); } byte[] gbBytes = gbBuffer.array(); // 输出 GB18030 编码的字节数组的 16 表示 String hexGbStr = ""; for (int i = 0; i < gbBytes.length; i++) { hexGbStr += String.format("%02X", gbBytes[i]); } System.out.println(hexGbStr); // 输出 "D6D0B9FA" } } ``` 需要注意的是,如果输入的 16 字符串中有非法字符,或者转换时出现错误,可能会抛出异常。因此,在代码中需要使用 try-catch 语句来处理异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值