首页编程java编程java hex字符是什么,HEX值是什么

java hex字符是什么,HEX值是什么

编程之家2023-10-14112次浏览

大家好,关于java hex字符是什么很多朋友都还不太明白,今天小编就来为大家分享关于HEX值是什么的知识,希望对各位有所帮助!

java hex字符是什么,HEX值是什么

java String字符串转UTF-8 hexcode怎么转

首先,java在内存中是使用的双字节字符unicode的编码方式。

每个char对应的是32位的整型。

内存中对字符串操作其实不用考虑字符集。

java hex字符是什么,HEX值是什么

只有在读取到内存中,和输出时,需要考虑字符集转换。

如果源代码中包含中文字符串,java编译器会按照编译时指定的字符集转换到unicode。

(不指定时,按当前操作系统的配置来)

java hex字符是什么,HEX值是什么

当一个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值是什么的介绍到此结束,希望对大家有所帮助。

java 内部类 什么用(Java 静态内部类作用)java 线程什么时候结束,在java中怎样知道子进程什么时候结束