Guide for Escriptura Binaria
Com abordar aquest problema
Se't donarà un nombre \(N\) i després \(N\) nombres enters separats per espais (cadascun entre 0 i 255, ja \
que has d'escriure'ls com a bytes). Has de crear un fitxer BINARI (no de text) dins la carpeta out amb \
aquests valors, i imprimir per pantalla el nom d'aquest fitxer.
Idea general:
- Llegeix \(N\) i després els \(N\) nombres de l'entrada.
- Obre un fitxer nou dins
outen mode binari d'escriptura (no de text). - Escriu cada nombre com un sol byte (un valor de 0 a 255), no com el text del nombre.
- Tanca el fitxer i imprimeix per pantalla només el nom del fitxer que has creat (per exemple \
out/answer.txt, imprimiriesanswer.txt).
Paranys habituals:
- Si obres el fitxer en mode text i hi escrius amb
print/writenormal, estaràs escrivint els \ caràcters del nombre (per exemple "42" com els dos caràcters'4'i'2'), no el valor binari 42. \ Cal mode binari explícit. - Un byte només pot contenir valors de 0 a 255: si algun nombre de l'entrada no hi cap, revisa bé com \ el converteixes.
- Recorda imprimir només el NOM del fitxer, no la ruta completa
out/....
Pista per a Java
En Java, FileOutputStream escriu bytes directament. El mètode write(int) només fa servir el byte \
més baix del valor que li passis, així que si els teus nombres van de 0 a 255 el pots fer servir tal qual:
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine().trim());
StringTokenizer st = new StringTokenizer(sc.nextLine());
String nomFitxer = "answer.txt"; // tria el nom que vulguis
try (FileOutputStream fos = new FileOutputStream("out/" + nomFitxer)) {
for (int i = 0; i < n; i++) {
int valor = Integer.parseInt(st.nextToken());
fos.write(valor);
}
}
System.out.println(nomFitxer);
}
}
Fixa't que fos.write(valor) escriu un únic byte cru, no el text del nombre.