chaîne statique privée hexString = "0123456789ABCDEF";
public static void main(String[] args) {
System.out.println(encode("中文"));
System.out.println(decode(encode("中文")));
}
/*
* Encodez les chaînes en nombres hexadécimaux, adaptés à tous les caractères (y compris le chinois)
*/
Encodage de chaîne statique public (String str) {
// Récupère le tableau d'octets selon l'encodage par défaut
byte[] octets = str.getBytes();
StringBuilder sb = new StringBuilder(bytes.length * 2);
// Décomposez chaque octet du tableau d'octets en un entier hexadécimal à 2 chiffres
for (int i = 0; i
sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4));
sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0));
}
return sb.toString();
}
/*
* Décodez les nombres hexadécimaux en chaînes, adaptées à tous les caractères (y compris le chinois)
*/
décodage de chaîne statique publique (octets de chaîne) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length() / 2);
// Assemblez chaque entier hexadécimal à 2 chiffres en un octet
for (int i = 0; i
baos.write((hexString.indexOf(bytes.charAt(i))
.indexOf(bytes.charAt(i + 1))));
retourner une nouvelle chaîne(baos.toByteArray());
}
Les tests personnels sont réalisables et prennent en charge le chinois ! ! ! Pensez à l'adopter si cela est utile
Utilisez cette méthode pour convertir la chaîne de nombres hexadécimaux transmise en une chaîne au format UTF-8
String statique publique toStringHex1(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i
essayez {
baKeyword[i] = (octet) (0xff & Integer.parseInt(s.substring(
i*2, i*2+2), 16));
} capture (Exception e) {
e.printStackTrace();
}
}
essayez {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} capture (Exception e1) {
e1.printStackTrace();
}
retour s;
}
Je pense que votre problème consiste simplement à convertir des nombres en caractères, n'est-ce pas ? Alors je ne vous aiderai pas à créer le code source multiligne du texte intégral. J'ai fait une ligne de conversion. Vous pouvez imbriquer une boucle dans la couche externe. utilisez 2D Array pour réaliser une conversion de code ASCII multiligne du texte intégral :
#include "Stdio.h"
#include "Conio.h"
int principal (vide)
{
int num[10],i=0;
while(getchar() != 'n')
{
getchar();
scanf("%x",&num[i]);
printf("%c",num[i]);
i++;
}
getch();
retour 0;
}
Le principe est le suivant :
Le format de vos quatre octets à chaque fois est sous la forme xyy. Il me suffit de lire le nombre hexadécimal. Je peux utiliser l'instruction scanf("%x",&num[i]); nombres hexadécimaux, tous les nombres hexadécimaux d'une rangée sont extraits dans une boucle et stockés dans un tableau unidimensionnel.
En termes de sortie, j'étais paresseux et je l'ai lu directement et je l'ai affiché. Cependant, ce n'est pas la clé. La clé est de générer l'instruction avec printf("%c",num[i]); convertir l'hexadécimal Les numéros du système sont convertis en caractères correspondant au code ascii et à la sortie.
Maintenant, comprenez-vous ? Il utilise des entrées et des sorties formatées pour lire les nombres hexadécimaux et les caractères de sortie. (Les deux getchar() sont utilisés pour lire les caractères et x respectivement~~)
#Convertir les caractères hexadécimaux en caractères binaires
def str2octet(s):
base='0123456789ABCDEF'
i=0
s = s.upper()
s1=''
pendant que je c1=s[i]
c2=s[i+1]
i+=2
b1=base.find(c1)
b2=base.find(c2)
si b1 == -1 ou b2 == -1 :
retour Aucun
s1+=chr((b1 retourne s1
s = 'C7 EB CE F0 BE C6 BA F3 BC DD B3 B5'.replace ('', '') #Supprimer les espaces
s1 = str2octet(s)
print s1.decode('gbk') #Décodage et sortie avec encodage gbk
#résultats
>>>s1
'xc7xebxcexf0xbexc6xbaxf3xbcxddxb3xb5'
>>>imprimer s1.decode('gbk')
S'il vous plaît, ne buvez pas et conduisez
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!