/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
cast til byte[]
Fra : Benny Andersen


Dato : 06-10-02 16:24

Er det muligt at flytte indholdet af en 'int' til 'byte[4]', og
omvendt; vha. af cast?

class Counter
{
   int value;
   String ufn;

.....
public void set() throws FileNotFoundException, IOException
{   
   FileOutputStream os = new FileOutputStream(ufn);
   byte[] ba = new byte[4];
   
   // måske overflødig aritmetik
   for (int i=0, t=value; i<4; ++i, t >>= 8)
      ba[i] = (byte)(t&0xff);
   /////////////   
      
   os.write(ba);
    /* workaround, not using 'os' directly
    ObjectOutputStream oos = new ObjectOutputStream(os);
    oos.writeInt(this.value);
    oos.close();
    */
   os.close();
}


.....

public int value() throws FileNotFoundException, IOException      
{   
   FileInputStream is = new FileInputStream(ufn);
   byte[] ba = new byte[4];
   is.read(ba);
      
   // måske overflødig aritmetik
   value =0;
   for (int i=3; i>=0; --i)
    value = (value << 8) | ( ba[i] & 0x80) | (ba[i] & 0x7F);
   //////////
   is.close();
   
   return value;   
}
.....
};


/Benny

 
 
Lars Dam (06-10-2002)
Kommentar
Fra : Lars Dam


Dato : 06-10-02 16:41

On Sun, 06 Oct 2002 15:23:56 GMT, be9@worldoffline.dk (Benny Andersen)
wrote:

>Er det muligt at flytte indholdet af en 'int' til 'byte[4]', og
>omvendt; vha. af cast?

Nej. Du må regne dig frem til den.

vh. ld


Jacob Bay Hansen (07-10-2002)
Kommentar
Fra : Jacob Bay Hansen


Dato : 07-10-02 23:11

I java.net.Inet4Address gør de således:

public byte[] getAddress() {
   byte[] addr = new byte[INADDRSZ];

   addr[0] = (byte) ((address >>> 24) & 0xFF);
   addr[1] = (byte) ((address >>> 16) & 0xFF);
   addr[2] = (byte) ((address >>> 8) & 0xFF);
   addr[3] = (byte) (address & 0xFF);
   return addr;
}

address er en int, addr er et byte[4]

- Jake

Lars Dam wrote:
> On Sun, 06 Oct 2002 15:23:56 GMT, be9@worldoffline.dk (Benny Andersen)
> wrote:
>
>
>>Er det muligt at flytte indholdet af en 'int' til 'byte[4]', og
>>omvendt; vha. af cast?
>
>
> Nej. Du må regne dig frem til den.
>
> vh. ld
>


Benny Andersen (10-10-2002)
Kommentar
Fra : Benny Andersen


Dato : 10-10-02 14:44

On Tue, 08 Oct 2002 00:11:17 +0200, Jacob Bay Hansen
<jacob.bay.hansen@rain.dk> wrote:
> I java.net.Inet4Address gør de således:
>
> public byte[] getAddress() {
>    byte[] addr = new byte[INADDRSZ];
>
>    addr[0] = (byte) ((address >>> 24) & 0xFF);
>    addr[1] = (byte) ((address >>> 16) & 0xFF);
>    addr[2] = (byte) ((address >>> 8) & 0xFF);
>    addr[3] = (byte) (address & 0xFF);
>    return addr;
> }
>
OK, så er det nok standard måden. Mener du ikke '>>' for bitskift operationerne?

/Benny

Jacob Bay Hansen (10-10-2002)
Kommentar
Fra : Jacob Bay Hansen


Dato : 10-10-02 16:03

Benny Andersen wrote:
> On Tue, 08 Oct 2002 00:11:17 +0200, Jacob Bay Hansen
> <jacob.bay.hansen@rain.dk> wrote:
>
>>I java.net.Inet4Address gør de således:
>>
>> public byte[] getAddress() {
>>   byte[] addr = new byte[INADDRSZ];
>>
>>   addr[0] = (byte) ((address >>> 24) & 0xFF);
>>   addr[1] = (byte) ((address >>> 16) & 0xFF);
>>   addr[2] = (byte) ((address >>> 8) & 0xFF);
>>   addr[3] = (byte) (address & 0xFF);
>>   return addr;
>> }
>>
>
> OK, så er det nok standard måden. Mener du ikke '>>' for bitskift operationerne?
>
> /Benny

Ovenstående er kildekoden fra Sun. Men jeg tror ikke man ønsker at
benytte '>>' da den signed (dvs. beholder mest betydende bit).

- Jake


Benny Andersen (11-10-2002)
Kommentar
Fra : Benny Andersen


Dato : 11-10-02 08:06


OK, jeg kendte ikke '>>>' (unsigned right shift). Det er lidt tricky at udføre
bit operationer i Java, hvor alle typer er signed.
Så blev jeg det klogere. Tak for oplysningen.

/Benny

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste