J'ai un tableau de chaînes. Je veux le convertir en tableau d'octets. J'utilise le programme Java. Par exemple:
String str[] = {"aa", "55"};
convertir en:
byte new[] = {(byte)0xaa, (byte)0x55};
Que puis-je faire?
En regardant l'exemple, je suppose que vous voulez dire qu'un tableau de chaînes est en fait un tableau de représentation HEX d'octets, n'est-ce pas?
Si oui, alors pour chaque élément de chaîne, je ferais ce qui suit:
construire une valeur d'octet, où le premier caractère est des bits plus élevés et le second caractère est les bits inférieurs. Par exemple.
int byteVal = (firstCharNumber << 4) | secondCharNumber;
String str = "Your string";
byte[] array = str.getBytes();
Convertissez la chaîne en Byte-Array:
byte[] theByteArray = stringToConvert.getBytes();
Convertir une chaîne en octet:
String str = "aa";
byte b = Byte.valueOf(str);
Vous pouvez essayer quelque chose de similaire à ceci:
String s = "65";
byte value = Byte.valueOf(s);
Utilisez la méthode Byte.ValueOf()
pour tous les éléments du tableau String pour les convertir en valeurs d'octets.
Puisqu'il n'y avait pas de réponse pour conversion de chaîne hexadécimale en octet unique, voici la mienne:
private static byte hexStringToByte(String data) {
return (byte) ((Character.digit(data.charAt(0), 16) << 4)
| Character.digit(data.charAt(1), 16));
}
Exemple d'utilisation:
hexStringToByte("aa"); // 170
hexStringToByte("ff"); // 255
hexStringToByte("10"); // 16
Ou vous pouvez également essayer la Integer.parseInt(String number, int radix)
imo, bien meilleure que les autres.
// first parameter is a number represented in string
// second is the radix or the base number system to be use
Integer.parseInt("de", 16); // 222
Integer.parseInt("ad", 16); // 173
Integer.parseInt("c9", 16); // 201
Un long chemin à parcourir :). Je ne connais pas les méthodes pour se débarrasser des longues instructions for
ArrayList<Byte> bList = new ArrayList<Byte>();
for(String ss : str) {
byte[] bArr = ss.getBytes();
for(Byte b : bArr) {
bList.add(b);
}
}
//if you still need an array
byte[] bArr = new byte[bList.size()];
for(int i=0; i<bList.size(); i++) {
bArr[i] = bList.get(i);
}
String source = "testString";
byte[] byteArray = source.getBytes(encoding);
Vous pouvez foreach et faire la même chose avec toutes les chaînes du tableau.
La manière la plus simple (en utilisant Apache Common Codec):
byte[] bytes = Hex.decodeHex(str.toCharArray());
Ici, si vous convertissez une chaîne en octet []. Il existe un code utilitaire:
String[] str = result.replaceAll("\\[", "").replaceAll("\\]","").split(", ");
byte[] dataCopy = new byte[str.length] ;
int i=0;
for(String s:str ) {
dataCopy[i]=Byte.valueOf(s);
i++;
}
return dataCopy;
String str[] = {"aa", "55"};
byte b[] = new byte[str.length];
for (int i = 0; i < str.length; i++) {
b[i] = (byte) Integer.parseInt(str[i], 16);
}
Integer.parseInt (string, radix) convertit une chaîne en entier, le paramètre radix spécifie le système numérique.
Utilisez un radix de 16 si la chaîne représente un nombre hexadécimal.
Utilisez un radix de 2 si la chaîne représente un nombre binaire.
Utilisez une radix de 10 (ou omettez le paramètre radix) si la chaîne représente un nombre décimal.
Pour plus de détails, consultez les documents Java Java: https://docs.Oracle.com/javase/7/docs/api/Java/lang/Integer.html#parseInt (Java .lang.String,% 20int)