在与C语言交互时出现的char 类型length不一致,作为转换特出下列

package com.llivison.ws.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * 为实现在json字符串传输完整
 */
public class TcpToJsonNumber {
    private final static Logger logger = LoggerFactory.getLogger(TcpToJsonNumber.class);

    //对字符串进行编辑
    public static String jsonNumber(String str) {
        String result = "$" + Zerofill(String.valueOf(isStringLength(str))) + str;
        logger.info("tcpjsonNumber {}", result);
        return result;
    }

    //递归调用不够4位补0
    private static String Zerofill(String str) {
        if (str.length() < 4) str = Zerofill("0" + str);
        return str;
    }

    //判断是否是中文
    private static boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
            return true;
        }
        return false;
    }

    //拿到字符串长度(C语言中每个char 1字节 8位 java中 char 2字节 16位)
    private static int isStringLength(String strName) {
        int result = 0;
        char[] ch = strName.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            char c = ch[i];
            if (isChinese(c)) {
                result += 2;
            } else {
                result++;
            }
        }
        return result;
    }
}

发布了44 篇原创文章 · 获赞 12 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章