J'essaie de convertir un tableau d'octets en chaîne afin de pouvoir voir ce vecteur / tableau et analyser comment ces octets sont organisés.
J'utilise le code ci-dessous pour le faire: p >
String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+UUID.randomUUID().toString()+"audio_record.3gp";
public byte[] convert(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
for (int readNum; (readNum = fis.read(b)) != -1; ) {
bos.write(b, 0, readNum);
}
byte[] bytes = bos.toByteArray();
return bytes;
}
Mais cela ne fonctionne pas. Pourquoi le code ci-dessus ne fonctionne-t-il pas?
Il convient de mentionner que le tableau d'octets est construit selon cet autre code ici:
byte[] bytes = bos.toByteArray();
String msgDecode = new String(bytes); // trying to convert byte in String
System.out.println("Vetor de bytes [" + msgDecode + "]"); // Showing it
Le général l'idée est d'enregistrer un audio avec le smartphone et de convertir ce fichier audio en un tableau d'octets. Ce chemin de chaîne est le chemin où l'audio est sauvegardé après l'enregistrement. Ensuite, j'utilise ce chemin (qui représente le fichier audio) et je le convertis en un tableau d'octets selon le code ci-dessus.
Plus d'informations, vous pouvez trouver et m'aider ici: Comment résoudre cette erreur: la liaison des ressources Android a échoué?
p >
3 Réponses :
si vous voulez voir la valeur des octets, vous pouvez utiliser comme ci-dessous:
Log.d ("TAG", Arrays.toString (octets));
Le journal nécessite également un paramètre "tag"
@IvoBeckers J'ai toujours des doutes sur ce paramètre de balise. Comment ça marche exactement? Il doit avoir un type spécifique? Ou cela peut être n'importe quelle chaîne? Merci!
Ce que je vais essayer de faire, sur la base de ce que vous avez dit:
String decode = Arrays.toString(bytes);
Log.d("mytag", decode);
byte[] bytes = "ABCDEFG".getBytes();
System.out.println(new String(bytes)); // ABCDEFG
System.out.println(Arrays.toString(bytes)); // [65, 66, 67, 68, 69, 70, 71]
"Mais ça ne marche pas !!!" ce qui signifie? Qu'espériez-vous voir et que voyez-vous à la place?
@FedericoklezCulloca ne montre absolument rien dans la zone Console ou Build / Debug du studio Android. Je voulais voir un vrai vecteur avec ces octets (nombres différents pour chaque élément de vecteur).
Oui, mais comment voulez-vous les voir? Vous ne pouvez pas simplement imprimer des données binaires et vous attendre à voir quelque chose d'utile. Vous devrez parcourir le tableau et imprimer chaque octet, par exemple, sous la forme d'un nombre hexadécimal représentant l'octet. Est-ce ce dont vous avez besoin?
quelques conseils: bien que
System.out.printlnsoit possible, ce n'est pas la manière recommandée d'imprimer dans le développement Android. vous devriez utiliser la classeLogd'Android à la place@FedericoklezCulloca ce que vous avez dit c'est exactement ce dont j'ai besoin!
@IvoBeckers l'a compris! Merci!
@ user85421 peut-être que Arrays.toString (byte []) est préférable d'utiliser. Je vais essayer ça. Merci
Stackoverflow.com/q/59772285/12309591