private static String hexString = "0123456789ABCDEF";
public static void main(String[] args) {
System.out.println(encode("中文"));
System.out.println(decode(encode("中文")));
}
/*
* 將字串編碼成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
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
baos.write((hexString.indexOf(bytes.charAt(i))
.indexOf(bytes.charAt(i 1))));
return new String(baos.toByteArray());
}
親測可行,支持中文! ! !有用請記得採納
#使用這個方法可以傳進去的16進位的數字所組成的字串轉換為utf-8格式的字串
public static String toStringHex1(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; 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;
}
我想你的問題只是將數字轉換為字元對吧,那麼我就不幫你做全文多行的源碼了,我做了一行轉換的,你可以再在外層嵌套一個循環,並使用二維數組來實現全文多行的ASCII碼轉換:
#include "Stdio.h"
#include "Conio.h"
int main(void)
{
int num[10],i=0;
while(getchar() != '\n')
{
getchar();
scanf("%x",&num[i]);
printf("%c",num[i]);
i ;
}
getch();
return 0;
}
原理是這樣的:
你每次的四個位元組的格式都是\xyy的形式,我只要讀入那個十六進位數就可以了,用scanf("%x",&num[i]);語句就可以讀入十六進制數字,將一行的十六進制數在迴圈中全部取出存放在一維數組中。
在輸出方面我投了個懶,直接讀入就輸出了,不過這個不是關鍵了,關鍵是以printf("%c",num[i]);語句輸出,編譯器就會自行把十六進制數轉換為ascii碼所對應的字元並輸出。
現在你明白了麼,就是以格式化的輸入輸出實現讀入的是十六進位數,輸出的是字元。 (那兩個getchar()是分別讀入字元\和x的哈~~)
#將16進位字元轉成二進位字元
def str2byte(s):
base='0123456789ABCDEF'
i=0
s = s.upper()
s1=''
while i c1=s[i]
c2=s[i 1]
i =2
b1=base.find(c1)
b2=base.find(c2)
if b1 == -1 或 b2 == -1:
return None
s1 =chr((b1 return s1
s = 'C7 EB CE F0 BE C6 BA F3 BC DD B3 B5'.replace(' ','') #去掉空格
s1 = str2byte(s)
print s1.decode('gbk') #以gbk編碼解碼輸出
#結果
>>>s1
'\xc7\xeb\xce\xf0\xbe\xc6\xba\xf3\xbc\xdd\xb3\xb5'
>>>print s1.decode('gbk')
請勿酒後駕車
以上是如何用JAVA將十六進位轉換成字串?感謝!的詳細內容。更多資訊請關注PHP中文網其他相關文章!