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;
}
}
在與C語言交互時出現的char 類型length不一致,作爲轉換特出下列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.