🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #17660

Re: Meter bytes dentro de un string en java

#17660
From: Juan Gonzalo de Silva Medina
Date: Thu, 02 Nov 2000 16:25
78 lines
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-mail
References: <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