Ver Mensaje Individual
  #5 (permalink)  
Antiguo 31/01/2016, 11:50
Avatar de Profesor_Falken
Profesor_Falken
 
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: De ASCII to bytes

Buenas,

En cualquier caso aunque se utilice el ASCII extendido, un byte puede almacenar 256 valores, por lo que no deberia haber problema.

El caso es que Java, aunque originalmente utilizaba Ascii (ver constructores deprecados de la clase String) desde hace ya muchisimo tiempo utiliza internamente el charset Unicode para representar los caracteres.

Por lo tanto, lo que te pasa es que si utilizas String no estas convirtiendo a codigos ASCII, sino a codigos del charset por defecto en tu sistema, UTF-8: http://www.utf8-chartable.de/
UTF-8 utiliza 1 byte solo para los primeros caracteres y para el resto utiliza 2. Eso explica los extranos resultados.

Para conseguir lo que quieres tendras que trabajar a mas bajo nivel y utilizar char en lugar de String.

Código Java:
Ver original
  1. public class TestASCII {
  2.     public static void main(String[] args) {
  3.         System.out.println(AsciiToBinary("ªØ(".charAt(0)));
  4.         System.out.println(AsciiToBinary("ªØ(".charAt(1)));
  5.         System.out.println(AsciiToBinary("ªØ(".charAt(2)));
  6.     }
  7.    
  8.     public static String AsciiToBinary(char character){  
  9.           StringBuilder binary = new StringBuilder();  
  10.  
  11.            int val = character;  
  12.              for (int i = 0; i < 8; i++)  
  13.              {  
  14.                 binary.append((val & 128) == 0 ? 0 : 1);  
  15.                 val <<= 1;  
  16.              }
  17.  
  18.           return binary.toString();  
  19.     }
  20. }

Un saludo
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 31/01/2016 a las 11:55