toHexString
تقوم السلسلة الثابتة العامة toHexString(int i) بإرجاع تمثيل السلسلة لمعلمة عدد صحيح في شكل عدد صحيح سداسي عشري غير موقّع.
إذا كانت الوسيطة سالبة، فإن قيمة العدد الصحيح غير الموقع هي الوسيطة بالإضافة إلى 232؛ وإلا فإنها تساوي الوسيطة. تحويل القيمة إلى سلسلة رقمية ASCII سداسية عشرية (أساس 16) بدون أصفار بادئة. إذا كانت قيمة الحجم غير الموقعة هي صفر، فسيتم تمثيلها بحرف صفري '0' ('/u0030')؛ وإلا فإن الحرف الأول في تمثيل الحجم غير الموقع لن يكون حرفًا صفريًا. استخدم الأحرف التالية كأرقام سداسية عشرية:
0123456789abcdef
تتراوح هذه الأحرف من "/u0030" إلى "/u0039" ومن "/u0061" إلى "/u0066". إذا كنت تريد أحرفًا كبيرة، فيمكنك استدعاء الأسلوب String.toUpperCase() بناءً على النتيجة:
Integer.toHexString(n).toUpperCase()
المعلمة:
i - العدد الصحيح الذي سيتم تحويله إلى سلسلة.
يعود:
تمثيل سلسلة لقيمة عددية غير موقعة يتم التعبير عنها بالوسائط السداسية العشرية (الأساس 16).
// تحويل السلسلة إلى ترميز سداسي عشري
سلسلة ثابتة عامة toHexString(سلسلة s)
{
سلسلة سلسلة = ""؛
لـ (int i=0;i<s.length();i++)
{
int ch = (int)s.charAt(i);
String s4 = Integer.toHexString(ch);
شارع = شارع + s4؛
}
شارع العودة؛
}
// تحويل الترميز الست عشري إلى سلسلة
سلسلة toStringHex العامة الثابتة (سلسلة s)
{
byte[] baKeyword = new byte[s.length()/2];
ل(int i = 0; i < baKeyword.length; i++)
{
يحاول
{
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
قبض (استثناء ه)
{
printStackTrace();
}
}
يحاول
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
الصيد (الاستثناء e1)
{
e1.printStackTrace();
}
العودة ق.
}
// تحويل الترميز الست عشري إلى سلسلة
سلسلة toStringHex العامة الثابتة (سلسلة s)
{
byte[] baKeyword = new byte[s.length()/2];
ل(int i = 0; i < baKeyword.length; i++)
{
يحاول
{
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
قبض (استثناء ه)
{
printStackTrace();
}
}
يحاول
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
الصيد (الاستثناء e1)
{
e1.printStackTrace();
}
العودة ق.
}
public static void main(String[] args) {
System.out.println(encode("中文"));
System.out.println(decode(encode("中文")));
}
/*
* مجموعة أحرف رقمية سداسية عشرية
*/
سلسلة ثابتة خاصة hexString = "0123456789ABCDEF"؛
/*
* تشفير السلاسل إلى أرقام ست عشرية، مناسبة لجميع الأحرف (بما في ذلك اللغة الصينية)
*/
ترميز السلسلة الثابتة العامة (String str)
{
// احصل على مصفوفة البايت بناءً على الترميز الافتراضي
byte[] bytes=str.getBytes();
StringBuilder sb=new StringBuilder(bytes. length*2);
// قم بتحليل كل بايت في مصفوفة البايت إلى عدد صحيح سداسي عشري مكون من رقمين
ل(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();
}
/*
* فك رموز الأرقام السداسية العشرية إلى سلاسل تنطبق على جميع الأحرف (بما في ذلك اللغة الصينية)
*/
فك ترميز السلسلة الثابتة العامة (سلسلة بايت)
{
ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes. length()/2);
// قم بتجميع كل عدد صحيح سداسي عشري مكون من رقمين في بايت واحد
ل(int i=0;i<bytes.length();i+=2)
baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
إرجاع سلسلة جديدة (baos.toByteArray());
}
الطريقة الثانية:
طباعة صفيف البايت المحدد إلى وحدة التحكم في شكل سداسي عشري
الطبقة العامة Util {
الاستخدام العام () {
}
/**
* طباعة صفيف البايت المحدد إلى وحدة التحكم في شكل سداسي عشري
* سلسلة تلميحparam
* @param ب بايت []
* @العودة فارغة
*/
printHexString العامة الثابتة (تلميح السلسلة، بايت [] ب) {
System.out.print(تلميح);
لـ (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
إذا (hex.length() == 1) {
سداسي عشري = '0' + سداسي عشري؛
}
System.out.print(hex.toUpperCase() + " ");
}
System.out.println("");
}
/**
*
* @param ب بايت[]
* @ سلسلة العودة
*/
سلسلة ثابتة عامة Bytes2HexString(byte[] b) {
سلسلة ret = "";
لـ (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
إذا (hex.length() == 1) {
سداسي عشري = '0' + سداسي عشري؛
}
ret += hex.toUpperCase();
}
عودة متقاعد؛
}
/**
* الجمع بين حرفين ASCII في بايت واحد؛
* مثل: "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);
عودة متقاعد؛
}
/**
* تحويل السلسلة المحددة src إلى شكل سداسي عشري عن طريق قسمة كل حرفين
* على سبيل المثال: "2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
* سلسلةparam src
* @إرجاع البايت[]
*/
البايت الثابت العام[] HexString2Bytes(String src){
بايت[] ret = بايت جديد[8];
byte[] tmp = src.getBytes();
ل(int i=0;i<8;i++){
ret[i] = UniteBytes(tmp[i*2], tmp[i*2+1]);
}
عودة متقاعد؛
}
}