java hex字符是什么,HEX值是什么
大家好,关于java hex字符是什么很多朋友都还不太明白,今天小编就来为大家分享关于HEX值是什么的知识,希望对各位有所帮助!
java String字符串转UTF-8 hexcode怎么转
首先,java在内存中是使用的双字节字符unicode的编码方式。
每个char对应的是32位的整型。
内存中对字符串操作其实不用考虑字符集。
只有在读取到内存中,和输出时,需要考虑字符集转换。
如果源代码中包含中文字符串,java编译器会按照编译时指定的字符集转换到unicode。
(不指定时,按当前操作系统的配置来)
当一个java程序从外部获取字符串时,使用Reader系列类,
会按照默认或者指定的字符集读取,然后转换到unicode。
也就是为啥我在读文件时指定了 Charset.forName("GBK")
单纯的InputStream类不能处理字符集。
需要utf-8一般是为了输出。有两种方式,一种,使用Writer,内置了字符集转换能力。
选择合适的,然后在构造函数中指定即可。(有Writer是往OutputStream输出的,一下想不起名字了)
还有一种就是,自己用String的getBytes(charset)方法,得到转换过后的编码的二进制数组,然后对这个数组处理。比如我的代码中的FileOutputStream
汗,没说重点:String iso= new String(gbk.getBytes("UTF-8"),"ISO-8859-1");
String utf8=new String(iso.getBytes("ISO-8859-1"),"UTF-8");
HEX值是什么
HEX值指的是十六进制数值。
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字。
例如十进制数57,在二进制写作111001,在16进制写作39。在历史上,中国曾经在重量单位上使用过16进制,比如,规定16两为一斤。
十六进制普遍应用在计算机领域,这是因为将4个位元(Bit)化成单独的16进制数字不太困难。1字节可以表示成2个连续的16进制数字。可是,这种混合表示法容易令人混淆,因此需要一些字首、字尾或下标来显示。
扩展资料:
不同电脑系统、编程语言对于16进制数值有不同的表示方式:
1、Ada与VHDL用所基于的“数字引证”把16进制数包起来,例如“16#5A3#”。(注:Ada对整数和实数都可以使用从1到16中任何一个做为其基数。)而对于字节向量,VHDL使用字首 x表示,例如,x"10",对应的二进制码为:"00010000"。
2、C语言、C++、Shell、Python、Java语言及其他相近的语言使用字首“0x”,例如“0x5A3”。开头的“0”令解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)。在“0x”中的“x”可以大写或小写。对于字符量C语言中则以x+两位十六进制数的方式表示,如xFF。
3、十六进制转义序列:如 \x1abf4,可以使用任意多的十六进制数字,直至不是十六进制数字为止;
4、16位的通用字符名(universe-character name):\u后面必须跟4个十六进制数字(不足四位前面用零补齐),表示Unicode中在0至0xFFFF之内的码位(但不能表示0xD800到0xDFFF之内的码点,Unicode标准规定这个范围内的码位保留,不表示字符);
参考资料来源:百度百科-十六进制
java 怎么解析\xE4\xB8\xAD 这类十六进制字符串
toHexString
public static String toHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。
如果参数为负,那么无符号整数值为参数加上 232;否则等于该参数。将该值转换为十六进制(基数 16)的无前导 0的 ASCII数字字符串。如果无符号数的大小值为零,则用一个零字符'0'('\u0030')表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。用以下字符作为十六进制数字:
0123456789abcdef
这些字符的范围是从'\u0030'到'\u0039'和从'\u0061'到'\u0066'。如果希望得到大写字母,可以在结果上调用 String.toUpperCase()方法:
Integer.toHexString(n).toUpperCase()
参数:
i-要转换成字符串的整数。
返回:
用十六进制(基数 16)参数表示的无符号整数值的字符串表示形式。
//转化字符串为十六进制编码
public static String toHexString(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;
}
//转化十六进制编码为字符串
public static String toStringHex(String s)
{
byte[] baKeyword= new byte[s.length()/2];
for(int i= 0; i< baKeyword.length; i++)
{
try
{
baKeyword[i]=(byte)(0xff& Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(Exception e)
{
e.printStackTrace();
}
}
try
{
s= new String(baKeyword,"utf-8");//UTF-16le:Not
}
catch(Exception e1)
{
e1.printStackTrace();
}
return s;
}
//转化十六进制编码为字符串
public static String toStringHex(String s)
{
byte[] baKeyword= new byte[s.length()/2];
for(int i= 0; i< baKeyword.length; i++)
{
try
{
baKeyword[i]=(byte)(0xff& Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(Exception e)
{
e.printStackTrace();
}
}
try
{
s= new String(baKeyword,"utf-8");//UTF-16le:Not
}
catch(Exception e1)
{
e1.printStackTrace();
}
return s;
}
public static void main(String[] args){
System.out.println(encode("中文"));
System.out.println(decode(encode("中文")));
}
/*
* 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());
}
第二种方法:
将指定byte数组以16进制的形式打印到控制台
复制代码代码如下:
package com.nantian.iclient.atm.sdb;
public class Util{
public Util(){
}
/**
*将指定byte数组以16进制的形式打印到控制台
*@param hint String
*@param b byte[]
*@return void
*/
public static void printHexString(String hint, byte[] b){
System.out.print(hint);
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()+"");
}
System.out.println("");
}
/**
*
*@param b byte[]
*@return String
*/
public static String Bytes2HexString(byte[] b){
String ret="";
for(int i= 0; i< b.length; i++){
String hex= Integer.toHexString(b[i]& 0xFF);
if(hex.length()== 1){
hex='0'+ hex;
}
ret+= hex.toUpperCase();
}
return ret;
}
/**
*将两个ASCII字符合成一个字节;
*如:"EF"--> 0xEF
*@param src0 byte
*@param src1 byte
*@return byte
*/
public static byte uniteBytes(byte src0, byte src1){
byte _b0= Byte.decode("0x"+ new String(new byte[]{src0})).byteValue();
_b0=(byte)(_b0<< 4);
byte _b1= Byte.decode("0x"+ new String(new byte[]{src1})).byteValue();
byte ret=(byte)(_b0 ^ _b1);
return ret;
}
/**
*将指定字符串src,以每两个字符分割转换为16进制形式
*如:"2B44EFD9"--> byte[]{0x2B, 0x44, 0xEF, 0xD9}
*@param src String
*@return byte[]
*/
public static byte[] HexString2Bytes(String src){
byte[] ret= new byte[8];
byte[] tmp= src.getBytes();
for(int i=0; i<8; i++){
ret[i]= uniteBytes(tmp[i*2], tmp[i*2+1]);
}
return ret;
}
}
关于java hex字符是什么,HEX值是什么的介绍到此结束,希望对大家有所帮助。