`
dreamoftch
  • 浏览: 495936 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

十六进制 与 字符串 转换(含中文) 以及 如何判断字符串中是否包含中文字符

阅读更多
/*
	 * 16进制数字字符集
	 */
	private static String hexString = "0123456789ABCDEF";

	/*
	 * 将字符串编码成16进制数字,适用于所有字符(包括中文)
	 */
	public static String encode(String str) {
		// 根据默认编码获取字节数组
		byte[] bytes = str.getBytes();
		StringBuilder sb = new StringBuilder(bytes.length * 2);
		// 将字节数组中每个字节拆解成2位16进制整数
		for (int i = 0; i < bytes.length; i++) {
			sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4));
			sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0));
		}
		return sb.toString();
	}

/*
	 * 将16进制数字解码成字符串,适用于所有字符(包括中文)
	 */
	public static String decode(String bytes) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream(
				bytes.length() / 2);
		// 将每2位16进制整数组装成一个字节
		for (int i = 0; i < bytes.length(); i += 2)
			baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString
					.indexOf(bytes.charAt(i + 1))));
		return new String(baos.toByteArray());
	}


   

 

另外也可以分开对待中文和英文:

由于在字符串中,中文占2个字节,英文占一个字节,所以可以分开对待,如果既包含中文又包含英文,则最好还是使用上面的encode和decode方法

/*
	 *  将字符串编码成16进制数字,适用于所有字符
	 */
	public static String toHexString(String s)
			throws UnsupportedEncodingException {
		String result = "";
		String temp="";
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			result += Integer.toHexString(c);
			
		}
		
		return result;
	}


/*
	 * 将16进制数字解码成字符串,适用于所有字符(针对英文)
	 */
	public static String toStringHex(String s) {
		String result="";
		byte[] baKeyword = new byte[s.length() / 2];
		for (int i = 0; i < baKeyword .length; i++) {
			try {
				baKeyword [i] = (byte)  Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		result=new String(baKeyword);
		return result;
	}

/*
	 * 将16进制数字解码成字符串,适用于所有字符(针对中文)
	 */
	public static String toStringHex2(String s) {
		String result="";
		char[] c=new char[s.length()/4];
		for (int i = 0; i < c.length; i++) {
			try {
				c[i] = (char)  Integer.parseInt(s.substring(i * 4, i * 4 + 4), 16);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		result=new String(c);
		return result;
	}

 

 

 

判断字符串是否包含中文字符:(注:java字符串中中文占2字节,英文占1字节,虽然字符无论中英文都是两个字节,但是字符串不是按照字符的规则来的)

 

// GENERAL_PUNCTUATION 判断中文的“  “   ”号(中文引号)
	// CJK_SYMBOLS_AND_PUNCTUATION 判断中文的“ 。”号(中文句号)
	// HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的“ ,”号(中文逗号)
	private static final boolean isChinese(String s) {
		boolean result = false;
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			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.GENERAL_PUNCTUATION
					|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
					|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
				result = true;
			}
		}
		return result;
	}

 

分享到:
评论

相关推荐

    C# 字符串转十六进制串,16进制反向转回原字符串

    要将字符串转换为十六进制串,我们需要对字符串中的每个字符进行编码,然后将编码结果转换成十六进制字符串。C#提供了`BitConverter`类和`ToString`方法来完成这个任务: ```csharp public static string StringTo...

    十六进制与字符串互转

    反之,将字符串转换为十六进制数值则需要解析字符串中的每个字符并将其转换回相应的数值。 对于“将十六进制转换成字符串”的函数,我们可以创建一个循环,遍历输入的十六进制数值,然后逐个将其转换为相应的ASCII...

    易语言十六进制与字符串转换源码-易语言

    首先,你需要将十六进制字符串转换成整数,然后将这个整数转换成十进制字符串。例如,你有一个十六进制字符串"4F",你可以使用“十六进制字符串到整数”函数将其转换为整数79,再使用“整数到十进制字符串”将其转换...

    将字符串转会为十六进制

    在IT领域,将字符串转换为十六进制是一个常见的需求,尤其是在数据处理、加密解密算法、网络通信等场景中。本文将深入解析如何实现这一功能,包括基础概念、代码实现及注意事项。 ### 基础概念 #### 字符串与十六...

    十进制整数和十六进制字符串转换

    函数`string_to_int`的作用是将一个十六进制字符串转换为十进制整数。 **函数实现细节** 1. **初始化变量**:声明变量`i`、`tmp`和`result`,其中`i`用于循环控制,`tmp`用于存储每次转换的结果,`result`用于累加...

    易语言源码易语言十进制与十六进制转换比较源码.rar

    - 易语言提供了“十进制整数”(DEC$)函数,可以将十六进制字符串转换为十进制整数。例如,`DEC$("A")` 返回10。 - 对于含有前导零的十六进制字符串,需要注意易语言可能会将其识别为八进制数,因此在转换前需要...

    51单片机串口程序,字符串16进制发送与接收

    在十六进制发送与接收中,我们需要将字符串转换为十六进制形式,以便正确地发送和接收数据。在发送端,我们可以使用sprintf函数将字符串转换为十六进制形式,而在接收端,我们可以使用atoi函数将十六进制形式转换回...

    易语言十六进制到十进制例程

    对于十六进制到十进制的转换,我们需要先将十六进制字符串转换为对应的整数值,然后将这个整数值转换为十进制字符串。 具体实现步骤如下: 1. **字符串预处理**:接收用户输入的十六进制字符串,确保字符串只包含...

    实验4 串口实验十六进制.zip

    例如,在Python中,可以使用内置的`int()`函数将十六进制字符串转换为整数,然后根据需要进一步转换为浮点数或其他类型。对于浮点数,可能需要使用如numpy库的`fromhex()`函数或者自定义的解析方法。 这个实验4的...

    c#,进制转换,二进制,十进制,十六进制转换,源码

    1. `Convert.ToString()`方法:将十进制数字转换为十六进制字符串。 ```csharp int decimalValue = 255; string hex = Convert.ToString(decimalValue, 16); ``` 2. 使用`BitConverter`类:这个类可以将数值类型...

    Excel中通过VBA将十六进制转成十进制

    在这个函数中,我们使用了一个 For 循环来遍历十六进制字符串,每次循环中,我们使用 If 语句来判断当前字符是否为数字,如果是数字,我们将其转换为十进制数字,并累加到最终结果中。如果当前字符不是数字,我们将...

    在二进制文件中搜索字符串、十六进制甚至另一个二进制文件_Python

    总之,Python提供了一系列的工具和方法,使我们能够方便地在二进制文件中搜索字符串、十六进制值以及另一个二进制文件。通过熟练掌握这些技术,你可以有效地处理各种二进制数据操作,这对于数据分析、逆向工程和软件...

    易语言源码易语言十六进制转换教学例程源码.rar

    3. **数值解析**:相反,从十六进制字符串转换回数值也是常见的操作。易语言提供了`数值`函数,可以将符合十六进制格式的字符串解析为相应的数值。 4. **用户交互**:在教学例程中,可能会包含输入和输出部分。...

    汇编语言实现二进制,十进制,十六进制的相互转换

    - 首先,将十六进制字符串转换为对应的数值。 - 然后,通过不断除以10并记录余数的方式获得十进制表示。 - 为了获取二进制表示,可以再次采用不断除以2的方法。 - 最后,将二进制表示转换为八进制,也是采用分组...

    二进制、十进制、十六进制之间数据转换程序

    在VC6.0环境下编写这样的转换程序,需要使用C++语言,涉及的关键点包括字符串处理、输入输出、数学运算以及条件判断。具体步骤可能如下: 1. 用户输入待转换的数值及其初始进制。 2. 验证输入的数值是否合法,如二...

    STC单片机串口1和2通用通讯程序,可字符串可十六进制

    本教程将详细讲解如何实现STC单片机串口1和串口2的通用通讯程序,以及如何进行字符串和十六进制数据的传输。 首先,STC单片机的串口1(UART1)和串口2(UART2)都是基于通用异步收发传输器(UART)的接口,它们支持...

    GetHex 十六进制字符串异或校验

    1. **输入解析**:用户输入的可能是纯文本形式的十六进制字符串,程序需要将其转换为二进制数组以便进行异或计算。 2. **异或运算**:遍历整个二进制数组,执行异或操作。可以设定固定的异或种子,也可以使用前一个...

    ASCII及十六进制转换工具《建》

    答:“进制转换”只能转换数值型,而“字符转换”是把该字符串一位一位 分别当作字符来转换! 2."字符转换"中想把对应的值转化为对应的字符,如果包括分隔符,需要手工 填入。 (详见上面的:ASCII转字符) 3....

    二进制数与十六进制数之间的相互转换

    `:将转换后的十六进制字符放入输出数组的正确位置,从高位到低位。 2. `main` 函数:这是程序的入口点。 - `scanf("%d", &groupNum)`:读取用户输入的测试用例数量。 - `for` 循环:根据用户输入的测试用例数量...

    将键入的十六进制数转换为对应二进制数并回显

    - **moval, byte ptr [si]**:读取num数组中的十六进制字符。 - 根据字符值调整为对应的二进制值(**cmp**, **sub**, **shl**, **rol**等指令)。 - 使用**int 21h**显示每位二进制数。 - **mov ah, 4ch**:设置...

Global site tag (gtag.js) - Google Analytics