汉字字符串转换成十六进制byte数组,一个汉字存到两个byte里面,大整数存到两个byte里面

复制代码
package com.zdz8207.test;


/**
 * 汉字字符串转换成十六进制byte数组,一个汉字存到两个byte里面
,大整数存到两个byte里面
 * @author zhengdunzhuang
 *
 
*/
public class ChineseCharacterStringToByteArray {

    public static void main(String[] args) {
        
        byte[] data = new byte[42];
        data[0] = (byte) 0x04;
        data[1] = (byte) (42);
        
        printHexString(data);
        System.out.println("");
        
        String msg = "你已成功添加李先生为好友";
        data = toHexByteByStrings(data,3,msg);
        printHexString(data);

/*
 * 用工具转换需要的结果:
你已成功添加李先生为好友
{0x4f60,0x5df2,0x6210,0x529f,0x6dfb,0x52a0,0x674e,0x5148,0x751f,0x4e3a,0x597d,0x5 3cb,0x0};

打印输出结果:
042A00000000000000000000000000000000000000000000000000000000000000000000000000000000
042A4F605DF26210529F6DFB52A0674E5148751F4E3A597D53CB00000000000000000000000000000000
4F60
 
*/
        
        int i = 20320;//0x4f60
        byte[] b = intToByteArray(i);
        System.out.println("");
        printHexString(b);
    }
    
    //整数转换成byte数组
    public static byte[] intToByteArray(int i) {   
          byte[] result = new byte[2];
          result[0] = (byte) ((i & 0xFF00) >> 8 );
          result[1] = (byte) ( i & 0xFF);
          return result;
    }
        
    /**
* 转化汉字字符串为十六进制编码并放到byte数组里面,一个字符两个byte字节
* @param data byte数组
* @param start 要追加的开始个数,从1算起,如从byte[3]开始 则start=4
* @param s 要转换的字符串
* @return
*/
    public static byte[] toHexByteByStrings(byte[] data,int start,String s) {
        int j = start;
        for (int i = 0; i < s.length(); i++) {
            int ch = (int) s.charAt(i);
            data[j-1] = (byte) ((ch & 0xFF00) >> 8 );
            data[j] = (byte) ( ch & 0xFF);
            j += 2;
        }
        return data;
    }
    
    // 转化字符串为十六进制编码字符串
    public static String toHexByStrings(String s) {
        String str = "";
        for (int i = 0; i < s.length(); i++) {
            int ch = (int) s.charAt(i);
            String s4 = Integer.toHexString(ch);
            str = str + s4;
        }
        return str;// 0x表示十六进制
    }
    
    //打印十六进制字符串
    public static void printHexString(byte[] b) {
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            System.out.print(hex.toUpperCase());
        }
    }

}
复制代码
posted @   大自然的流风  阅读(9029)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示