Article View: es.comp.lenguajes.java
Article #17660Re: Meter bytes dentro de un string en java
From: Juan Gonzalo de Silva Medina
Date: Thu, 02 Nov 2000 16:25
Date: Thu, 02 Nov 2000 16:25
78 lines
3276 bytes
3276 bytes
pedro.robledo@emersonenergy.com escribi�:
>
> Hola quisiera saber si alguien sabe como pasar de un string con una
> cadena que tiene un numero entre 0 y 255 a un string que contenga el
> correpondiente valor en ascii.
>
> Actualmente hago esto, con lo que tengo en la variable sPuertoBinario
> el valor en binario:
>
> String sPuerto = "129";
> int iPuerto=Integer.parseInt(sPuerto);
> Integer intPuerto = new Integer(iPuerto);
> byte bPuerto[]=new byte[1];
> bPuerto[0] = intPuerto.byteValue();
> String sPuertoBinario =new String(bPuerto);
>
> Pero esto no funciona en particular para este caso ya que pone en
> valor hexadeciman 63 es decir el caracter ascii ?. Sin embargo para
> los demas funciona. Podria ser que el primer bit de la variable
> bPuerto la interprete como el signo del byte y se haga un lio.
>
> Si alguien tiene informaci�n de como manipular bytes agradeceria mucho
> que me la mandara
>
> Gracias
Byte es siempre "signed", no puedes crear un byte (directamente) con
valor 0xFF. El compilador te da un error de perdida de precisi�n.
Ahora bien, en tu caso bPuerto[0] si vale 129, lo que pasa que String
convierte a Char y no existe un caracter negativo, ya que 129 es mayor
que 128 que es el l�mite de los positivos.
Te incluyo dos metodos para permitirte operar con los bytes, quizas no
es exactamente como tu quieres pero puedes mirar como se implementan
para aprender...
Saludos,
---8<-------
static int fromDigit(char ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
if (ch >= 'A' && ch <= 'F')
return ch - 'A' + 10;
if (ch >= 'a' && ch <= 'f')
return ch - 'a' + 10;
throw new
IllegalArgumentException("Digito hex inv�lido: '" + ch + "'");
}
static byte[] hexFromString(String hex)
{
int len = hex.length();
byte[] buf = new byte[((len + 1) / 2)];
int i = 0, j = 0;
if ((len % 2) == 1)
buf[j++] = (byte) fromDigit(hex.charAt(i++));
while (i < len)
{
buf[j++] = (byte) ((fromDigit(hex.charAt(i++)) << 4) |
fromDigit(hex.charAt(i++)));
}
return buf;
}
---8<--------------------------------
--
Juan Gonzalo de Silva Medina
System.out.println("I Love Linux");
Technical Details
Message-ID:
<3A019577.B32CEEC3@caymasa.es>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!isdnet!fu-berlin.de!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mailReferences:
<39fee8e9.23299052@news.ericsson.se>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,eaf146f523a8fecf X-Google-Attributes: gid1116f3,public X-Google-ArrivalTime: 2000-11-02 10:45:05 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!isdnet!fu-berlin.de!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mail From: Juan Gonzalo de Silva Medina <gonzalo@caymasa.es> Newsgroups: es.comp.lenguajes.java Subject: Re: Meter bytes dentro de un string en java Date: Thu, 02 Nov 2000 17:25:27 +0100 Organization: Telefonica Transmision de Datos Lines: 78 Message-ID: <3A019577.B32CEEC3@caymasa.es> References: <39fee8e9.23299052@news.ericsson.se> NNTP-Posting-Host: usr-67-80.caymasa.es Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Mailer: Mozilla 4.72 [es] (X11; U; Linux 2.2.14-5.0 i686) X-Accept-Language: es, en