18. maj 2004 - 21:41
Der er
16 kommentarer og 1 løsning
Konvertering fra byte til decimal mm.
Hej... jeg kunne godt tænke mig at vide følgende: 1) Jeg har et byteArray med to pladser. Hvordan får jeg fat i den decimale værdi af de to bytes (int32/int64/long)? 2) Hvordan konverterer jeg fra decimal til hex? 3) Hvordan konverterer jeg fra hex til decimal? 4) Hvordan konverterer jeg fra byte til en string med bits? 5) Hvordan konverterer jeg fra byte til string? Mvh Casualty
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
re 1) int i = (b[1] << 8) | b[0]; re 2) string sv = iv.ToString("X"); re 3) int iv = int.Parse(sv, NumberStyles.HexNumber); re 4 & 5) forklar nærmere
4) Mener du dette? byte a = 55; string s = Convert.ToString (a, 2); Console.WriteLine(s);
Ok 4) jeg har en byte der er 4 Jeg vil gerne have en string = "0100" 5) Ved egentlig ikke hvad jeg mente, så bare glem det indtil videre
Ok.. Tak Erik Jacobsen... det var det jeg mente..
Og tak til arne. Lægger i begge et svar?
Ingen svar fra mig - jeg samler ikke på point. Men du får nu kun "100" med min stump kode. Skal du have "0100" eller "00000100" ?
men jeg kan jo selv tjekke længden og fylde op med nuller :)
Ellers kan I kode jeres egen. Det må kunne gøres på 717 forskellige måder. To tilfældige: public static string ToBin1(byte b) { return (((b & 128) != 0) ? "1" : "0") + (((b & 64) != 0) ? "1" : "0") + (((b & 32) != 0) ? "1" : "0") + (((b & 16) != 0) ? "1" : "0") + (((b & 8) != 0) ? "1" : "0") + (((b & 4) != 0) ? "1" : "0") + (((b & 2) != 0) ? "1" : "0") + (((b & 1) != 0) ? "1" : "0"); } public static string ToBin2(byte b) { string res = ""; int tmp = b; for(int i = 0; i < 8; i++) { res = tmp % 2 + res; tmp /= 2; } return res; }
Jeg fandt også lige een: public static string ToBinary(byte c) { StringBuilder result = new StringBuilder(); for (int i=0;i<8;i++) { if ((c & 1)==1) { result.Insert(0,"1"); } else { result.Insert(0,"0"); } c=(byte)(c>>1); } return result.ToString(); }
Arne. Hvad er det der sker her? int i = (b[1] << 8) | b[0]; jeg lægger 2 bytes sammen men jeg forstår ikke logikken i det... Og hvad gør jeg hvis der skal lægges flere bytes end 2?
Du skal tænke bits b[1] = xxxxxxxx b[0] = yyyyyyyy b[1] << 8 = xxxxxxxx << 8 = xxxxxxxx00000000 (b[1] << 8) | b[0] = xxxxxxxx00000000 | yyyyyyyy ? xxxxxxxxyyyyyyyy Du kan lave det samme med flere bytes end 2. Husk at være opmærksom på hvilken byte der er mest signifikant den første eller den sidste. Jeg har antaget den sidste. Det er native på x86 CPU'er.
Jeg forstår det stadig ikke? Hvad betyder "<<" og hvad betyder "|"(pipe)? Kan du ikke skrive et eksempel hvor man lægger 4 bytes sammen?
<< er shift left | er binær OR
(b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0]
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.