toHexString
public static String toHexString(int i)은 정수 매개변수의 문자열 표현을 16진수 부호 없는 정수 형식으로 반환합니다.
인수가 음수이면 부호 없는 정수 값은 인수에 232를 더한 값이고, 그렇지 않으면 인수와 같습니다. 값을 앞에 0이 없는 16진수(기본 16) ASCII 숫자 문자열로 변환합니다. 부호 없는 크기 값이 0이면 0 문자 '0'('/u0030')으로 표시됩니다. 그렇지 않으면 부호 없는 크기 표현의 첫 번째 문자는 0 문자가 아닙니다. 다음 문자를 16진수로 사용하세요.
0123456789abcdef
이러한 문자의 범위는 '/u0030'~'/u0039' 및 '/u0061'~'/u0066'입니다. 대문자를 원하면 결과에 대해 String.toUpperCase() 메서드를 호출할 수 있습니다.
Integer.toHexString(n).toUpperCase()
매개변수:
i - 문자열로 변환되는 정수.
반품:
16진수(기본 16) 인수로 표현된 부호 없는 정수 값의 문자열 표현입니다.
//문자열을 16진수 인코딩으로 변환
공개 정적 문자열 toHexString(문자열 s)
{
문자열 str="";
for (int i=0;i<s.length();i++)
{
int ch = (int)s.charAt(i);
문자열 s4 = Integer.toHexString(ch);
str = str + s4;
}
str을 반환;
}
// 16진수 인코딩을 문자열로 변환
공개 정적 문자열 toStringHex(문자열 s)
{
byte[] baKeyword = 새 바이트[s.length()/2];
for(int i = 0; i < baKeyword.length; i++)
{
노력하다
{
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(예외e)
{
e.printStackTrace();
}
}
노력하다
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
잡기 (예외 e1)
{
e1.printStackTrace();
}
반환 s;
}
// 16진수 인코딩을 문자열로 변환
공개 정적 문자열 toStringHex(문자열 s)
{
byte[] baKeyword = 새 바이트[s.length()/2];
for(int i = 0; i < baKeyword.length; i++)
{
노력하다
{
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(예외e)
{
e.printStackTrace();
}
}
노력하다
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
잡기 (예외 e1)
{
e1.printStackTrace();
}
반환 s;
}
공개 정적 무효 메인(String[] args) {
System.out.println(encode("중문"));
System.out.println(decode(encode("中文")));
}
/*
* 16진수 숫자 문자 세트
*/
개인 정적 문자열 hexString="0123456789ABCDEF";
/*
* 문자열을 모든 문자(중국어 포함)에 적합한 16진수로 인코딩합니다.
*/
공개 정적 문자열 인코딩(문자열 str)
{
//기본 인코딩을 기반으로 바이트 배열을 가져옵니다.
바이트[] 바이트=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));
}
sb.toString()을 반환합니다.
}
/*
* 16진수를 문자열로 디코딩하여 모든 문자(중국어 포함)에 적용 가능
*/
공개 정적 문자열 디코드(문자열 바이트)
{
ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
//각각의 2자리 16진수 정수를 1바이트로 조합합니다.
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());
}
두 번째 방법:
지정된 바이트 배열을 16진수 형식으로 콘솔에 인쇄합니다.
공개 클래스 Util {
공공 유틸리티() {
}
/**
* 지정된 바이트 배열을 16진수 형식으로 콘솔에 인쇄합니다.
* @param 힌트 문자열
* @param b 바이트[]
* @return 무효
*/
공개 정적 무효 printHexString(문자열 힌트, 바이트[] b) {
System.out.print(힌트);
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
16진수 = '0' + 16진수;
}
System.out.print(hex.toUpperCase() + " ");
}
System.out.println("");
}
/**
*
* @param b 바이트[]
* @return 문자열
*/
공개 정적 문자열 Bytes2HexString(byte[] b) {
문자열 ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
16진수 = '0' + 16진수;
}
ret += hex.toUpperCase();
}
반환 ret;
}
/**
* 두 개의 ASCII 문자를 1바이트로 결합합니다.
* 예: "EF"--> 0xEF
* @param src0 바이트
* @param src1 바이트
* @return 바이트
*/
공개 정적 바이트 uniteBytes(바이트 src0, 바이트 src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
_b0 = (바이트)(_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
바이트 ret = (바이트)(_b0 ^ _b1);
반환 ret;
}
/**
* 지정된 문자열 src를 두 문자씩 나누어 16진수 형식으로 변환합니다.
* 예: "2B44EFD9" --> 바이트[]{0x2B, 0x44, 0xEF, 0xD9}
* @param src 문자열
* @return 바이트[]
*/
공개 정적 바이트[] HexString2Bytes(String src){
byte[] ret = 새 바이트[8];
byte[] tmp = src.getBytes();
for(int i=0; i<8; i++){
ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
}
반환 ret;
}
}