Avatar billede tetrix Nybegynder
04. januar 2010 - 19:13 Der er 12 kommentarer og
1 løsning

String til big endian

Well, jeg er blank og ny indenfor hvad der angår bytes i programmering. Jeg har gjort således:

byte[] eksempel = eksempel.getBytes();

Men jeg vil gerne have lavet stringet om til big endian.. hvordan gør jeg det?
Avatar billede tetrix Nybegynder
04. januar 2010 - 19:14 #1
Note: I mit eksempel hed både min byte variable og string eksempel.. det skal I ikke tage jer af, det er to forskellige ting ;-)
Avatar billede arne_v Ekspert
04. januar 2010 - 19:17 #2
Big/little endian giver kun mening for >=2 byte enheder.

Vil du have vendt bytesne i UTF-8 tegn som giver mere end 1 byte?
Avatar billede arne_v Ekspert
04. januar 2010 - 19:18 #3
DataInputStream/DataOutputStream kan laese og skrive big endian.

NIO ByteBuffer kan laese og skrive baade big og little endian.
Avatar billede tetrix Nybegynder
04. januar 2010 - 20:42 #4
Kan du give et eksempel på hvordan man vender bytesne og hvordan man skriver i big endian med outputstream?
Avatar billede arne_v Ekspert
04. januar 2010 - 21:02 #5
Selv ikke UTF-8 duer. Vi skal op i UTF-8.

Her er et eksempel på at skrive UTF-16 i little og big endian.

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class BigEndianFun {
    public static void main(String[] args) {
        String s = "ABCabc123ÆØÅæøå";
        byte[] blittle = new byte[1000];
        ByteBuffer bblittle = ByteBuffer.wrap(blittle);
        bblittle.order(ByteOrder.LITTLE_ENDIAN);
        for(int i = 0; i < s.length(); i++) {
            bblittle.putChar(s.charAt(i));
        }
        for(int i = 0; i < bblittle.position(); i++) {
            System.out.printf(" %02X", blittle[i]);
        }
        System.out.println();
        byte[] bbig = new byte[1000];
        ByteBuffer bbbig = ByteBuffer.wrap(bbig);
        bbbig.order(ByteOrder.BIG_ENDIAN);
        for(int i = 0; i < s.length(); i++) {
            bbbig.putChar(s.charAt(i));
        }
        for(int i = 0; i < bbbig.position(); i++) {
            System.out.printf(" %02X", bbig[i]);
        }
        System.out.println();
    }
}
Avatar billede arne_v Ekspert
04. januar 2010 - 21:03 #6
Jeg kan ogs[ godt lave et eksempel som vender ved at laese og skrive.
Avatar billede tetrix Nybegynder
04. januar 2010 - 21:15 #7
Som sagt er jeg ikke den skarpest hvad angår bytes, men hvordan får jeg det endelige resultat i en byte form? det er dét jeg søger! ;)
Avatar billede arne_v Ekspert
04. januar 2010 - 21:27 #8
String s = "ABCabc123ÆØÅæøå";
        byte[] b = new byte[2*s.length()];
        ByteBuffer bb = ByteBuffer.wrap(b);
        bb.order(ByteOrder.BIG_ENDIAN);
        for(int i = 0; i < s.length(); i++) {
            bb.putChar(s.charAt(i));
        }

vil gemme String s i byte[] b i big endian.
Avatar billede tetrix Nybegynder
04. januar 2010 - 21:41 #9
Okay, tak, smid et svar.. Dog lige en sidste ting..

Jeg har to bytes, A og B. Jeg vil gerne have indsat B efter A, så de to bytes hænger sammen i én byte.
Avatar billede tetrix Nybegynder
04. januar 2010 - 21:43 #10
Som en slutning på min sætning: Hvordan gør jeg det?
Avatar billede arne_v Ekspert
05. januar 2010 - 02:54 #11
svar
Avatar billede arne_v Ekspert
05. januar 2010 - 02:55 #12
Medmindre du ved at de 2 bytes kun bruger 4 bit hver (eller ihvertfald sammenlagt er <= 8 bit), så kan du ikke gemme dem i 1 byte.
Avatar billede arne_v Ekspert
05. januar 2010 - 02:56 #13
Tør man spørge om hvad det skal bruges til ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester