Frage

Was ist der beste Weg, um ein 32-Bit-Integer in vier (unsigned) Zeichen in C # teilen.

War es hilfreich?

Lösung

Quick'n'Dirty:

int value = 0x48454C4F;
Console.WriteLine(Encoding.ASCII.GetString(
  BitConverter.GetBytes(value).Reverse().ToArray()
));

Die Umwandlung des int Bytes, die Byte-Array für die richtige Reihenfolge umzukehren und dann bekommen die ASCII-Zeichendarstellung von ihm.

EDIT: die Reverse-Methode ist eine Erweiterung Methode von .NET 3.5, nur zur Info. die Byte-Reihenfolge umgekehrt nicht auch in Ihrem Szenario benötigt werden.

Cheers, David

Andere Tipps

Char? Vielleicht Sie suchen diese handliche kleine Helfer-Funktion?

Byte[] b = BitConverter.GetBytes(i);
Char c = (Char)b[0];
[...]

Es ist nicht klar, ob dies wirklich das, was Sie wollen, aber:

int x = yourNumber();
char a = (char)(x & 0xff);
char b = (char)((x >> 8) & 0xff);
char c = (char)((x >> 16) & 0xff);
char d = (char)((x >> 24) & 0xff);

Dies vorausgesetzt, dass Sie das Bytes als unterste Reihe von Unicode-Zeichen interpretiert werden sollen.

Ich habe es ein paar Möglichkeiten ausprobiert und fuhr die Zeit 1000000 Ints konvertieren genommen.

Einbau-convert-Methode, 325000 Zecken:

Encoding.ASCII.GetChars(BitConverter.GetBytes(x));

Zeigerkonvertierung, 100000 Zecken:

static unsafe char[] ToChars(int x)
{
    byte* p = (byte*)&x)
    char[] chars = new char[4];
    chars[0] = (char)*p++;
    chars[1] = (char)*p++;
    chars[2] = (char)*p++;
    chars[3] = (char)*p;

    return chars;
}

Bitshifting, 77000 Zecken:

public static char[] ToCharsBitShift(int x)
{
     char[] chars = new char[4];
     chars[0] = (char)(x & 0xFF);
     chars[1] = (char)(x >> 8 & 0xFF);
     chars[2] = (char)(x >> 16 & 0xFF);
     chars[3] = (char)(x >> 24 & 0xFF);
     return chars;
}

Sie erhalten die 8-Byte-Blöcke:

int a = i & 255; // bin 11111111
int b = i & 65280; // bin 1111111100000000

Sind die ersten drei Bytes nach unten in ein einziges Byte brechen, so dass sie nur durch die richtige Nummer teilen und anderen logischen ausführen und Ihre letzte Byte zu erhalten.

Edit:. Jasons Lösung mit dem bitshifts ist viel schöner natürlich

BitConverter

.net verwendet Unicode, ein Zeichen ist 2 Byte nicht 1

zwischen binären Daten zu konvertieren, die nicht-Unicode-Text der System.Text.Encoding-Klasse verwenden.

Wenn Sie 4 Bytes tun wollen und nicht die Zeichen dann das Zeichen ersetzen mit Byte in Jasons Antwort

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top