|
| 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
| |
|
|