toHexString
public static String toHexString(int i) は、整数パラメータの文字列表現を 16 進数の符号なし整数形式で返します。
引数が負の場合、符号なし整数値は引数に 232 を加えたものとなり、それ以外の場合は引数と等しくなります。値を先頭のゼロなしの 16 進数 (base 16) ASCII 数値文字列に変換します。符号なしサイズ値がゼロの場合、ゼロ文字「0」(「/u0030」)で表されます。それ以外の場合、符号なしサイズ表現の最初の文字はゼロ文字になりません。次の文字を 16 進数として使用します。
0123456789abcdef
これらの文字の範囲は「/u0030」から「/u0039」および「/u0061」から「/u0066」です。大文字が必要な場合は、結果に対して String.toUpperCase() メソッドを呼び出すことができます。
Integer.toHexString(n).toUpperCase()
パラメータ:
i - 文字列に変換される整数。
戻る:
16 進数 (base 16) 引数で表される符号なし整数値の文字列表現。
//文字列を 16 進エンコーディングに変換します
public static String toHexString(String s)
{
文字列 str="";
for (int i=0;i<s.length();i++)
{
int ch = (int)s.charAt(i);
文字列 s4 = Integer.toHexString(ch);
str = str + s4;
}
文字列を返します。
}
// 16 進エンコーディングを文字列に変換します
パブリック静的文字列 toStringHex(String s)
{
byte[] baKeyword = 新しい byte[s.length()/2];
for(int i = 0; i < baKeyword.length; i++)
{
試す
{
baKeyword[i] = (バイト)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(例外 e)
{
e.printStackTrace();
}
}
試す
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
catch (例外 e1)
{
e1.printStackTrace();
}
を返します。
}
// 16 進エンコーディングを文字列に変換します
パブリック静的文字列 toStringHex(String s)
{
byte[] baKeyword = 新しい byte[s.length()/2];
for(int i = 0; i < baKeyword.length; i++)
{
試す
{
baKeyword[i] = (バイト)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(例外 e)
{
e.printStackTrace();
}
}
試す
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
catch (例外 e1)
{
e1.printStackTrace();
}
を返します。
}
public static void main(String[] args) {
System.out.println(encode("中文"));
System.out.println(decode(encode("中文")));
}
/*
* 16 進数文字セット
*/
プライベート静的文字列 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));
}
sb.toString()を返します;
}
/*
* 16 進数を文字列にデコードし、すべての文字 (中国語を含む) に適用します
*/
public static String デコード(文字列バイト)
{
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))));
新しい文字列を返します(baos.toByteArray());
}
2 番目の方法:
指定されたバイト配列を 16 進形式でコンソールに出力します
パブリック クラス ユーティリティ {
public Util() {
}
/**
* 指定されたバイト配列を 16 進形式でコンソールに出力します
* @param ヒント文字列
* @param b バイト[]
* @return void
*/
public static void printHexString(Stringhint, byte[] b) {
System.out.print(ヒント);
for (int i = 0; i < b.length; i++) {
文字列 hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
16 進数 = '0' + 16 進数;
}
System.out.print(hex.toUpperCase() + " ");
}
System.out.println("");
}
/**
*
* @param b バイト[]
* @return 文字列
*/
public static String Bytes2HexString(byte[] b) {
文字列 ret = "";
for (int i = 0; i < b.length; i++) {
文字列 hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
16 進数 = '0' + 16 進数;
}
ret += hex.toUpperCase();
}
retを返します。
}
/**
* 2 つの ASCII 文字を 1 バイトに結合します。
* 例: "EF" --> 0xEF
* @param src0 バイト
* @param src1 バイト
* @リターンバイト
*/
パブリック静的バイト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 を 2 文字ごとに分割して 16 進形式に変換します
* 例: "2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
* @param src 文字列
* @戻りバイト[]
*/
public static byte[] 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を返します。
}
}