Hallo Leute!
Ich soll eine HexStringToByteArray neu implementieren. Daher schau ich mir gerade die Semantik an und sehe dieses Statement:
String p_hex.Length = "Blabalbal";
Byte[] p_bytes = new Byte[p_hex.Length >> 1];
Ich würde gerne wissen ob ich richtig mit der Annahme liege, dass hier der BitShift Right dafür verwendet wird um den EndLine Char den jeder String inne hat beim zuweisen in ein ByteArray entfernt wird?
gruß Charlie
Nein, ein Bitshift entspricht logisch einer Multiplikation (<<) bzw. Divison (>>) mit 2.
Es hätte also auch
Byte[] p_bytes = new Byte[p_hex.Length / 2];
dort stehen können.
Dein Hex-String enhält aber ungültige Zeichen, aber ich hoffe, du verstehst trotzdem warum das Zielarray nur halb so groß dann ist!?
den EndLine Char den jeder String inne hat
Wie kommst du auf sowas? Ein String hat nur das was man in ihn hinein schreibt, da ist nichts automatisch dran. Ganz davon abgesehen was du mit EndLine meinst.
C markiert das Ende eines Strings. C# und Java nicht.
Was also genau Deine Intension ist, das ist hier unklar.
Es wäre nett, wenn Du Dein Vorhaben genauer erklärst; denn nur dann macht der Thread hier sinn (oder dann auch nicht).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Fun fact: Auf .net strings folgt im Speicher trotzdem immer eine 0, sie sind also doch 0 terminiert. Das erleichtert interop mit nativen code.
Aber da braucht man sich nicht selbst drum zu kümmern.
Das hab ich hier zur Erleichterung nicht erwähnt, da damit der Entwickler i.d.R. nicht in Kontakt kommt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
also
String p_hex.Length = "Blabalbal";
funktioniert bei mir nicht. Hätte mich auch gewundert, wenn es funktioniert hätte. 😃
Hier ist ein schöner Artikel zum Thema Hex-Konvertierung:
How do you convert Byte Array to Hexadecimal String, and vice versa?