Jaki jest najlepszy sposób na podzielenie 32-bitowej liczby całkowitej na cztery (niepodpisane) znaki w języku C#.Konwersja z 32-bitowej liczby całkowitej na 4 znaki
Odpowiedz
Quick'n'dirty:
int value = 0x48454C4F;
Console.WriteLine(Encoding.ASCII.GetString(
BitConverter.GetBytes(value).Reverse().ToArray()
));
Konwersja int na bajty, odwrócenie bajt tablicę dla właściwej kolejności, a następnie uzyskanie reprezentacji znaków ASCII od niego.
EDYCJA: Metoda odwrotna jest metodą rozszerzenia z .NET 3.5, tylko dla informacji. Odwrócenie kolejności bajtów może również nie być potrzebne w twoim scenariuszu.
Pozdrawiam, David
Czy ostatecznym celem jest wydrukowanie ich na konsoli? Jeśli nie, ta metoda ma wiele niepotrzebnych kosztów ogólnych, w porównaniu do sugestii Jasona i Sama. – Kip
@Kip: Jest to bardziej przenośny sposób, aby uzyskać bajty na więcej niż tylko liczby całkowite.Żądanie jest raczej dziwne - dlaczego chciałbyś zakodować liczbę całkowitą jako znaki - chyba że naprawdę chciał powiedzieć bajty? –
@Kip: Jak wspomniano wcześniej, była to szybka i brudna odpowiedź. Console.WriteLine była po prostu dla mnie, aby uzyskać pewne dane wyjściowe i dowód, że działa. Ciekawą częścią są metody użyte do osiągnięcia celu. – VVS
Nie jest jasne, czy to jest naprawdę to, co chcesz, ale:
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);
zakłada to chcesz bajty interpretowane jako najniższego zakresu znaków Unicode.
dostaniesz 8-bajtowych bloków:
int a = i & 255; // bin 11111111
int b = i & 65280; // bin 1111111100000000
łamią pierwsze trzy bajty w dół w jeden bajt, po prostu podzielić je przez odpowiednie liczby i wykonać kolejny logiczny i uzyskać ostateczną bajt.
Edytuj: Rozwiązanie Jason'a z bitshiftami jest oczywiście o wiele ładniejsze.
Char? Może szukasz tej poręcznej funkcji małego pomocnika?
Byte[] b = BitConverter.GetBytes(i);
Char c = (Char)b[0];
[...]
BitConverter
.net używa Unicode, char jest 2 nie bajty 1
do konwersji danych binarnych zawierających tekst non-unicode użyć klasy System.Text.Encoding .
Jeśli nie chcesz 4 bajty, a nie znaków następnie zastąpić char bajt w odpowiedzi Jasona
Dla jasności: .net używa Unicode zakodowanego jako UCS-2 (ergo 2 bajty). – tzot
Próbowałem to kilka sposobów i taktowany czas potrzebny na konwersję 1000000 ints.
Wbudowana metoda konwersji, 325000 kleszcze:
Encoding.ASCII.GetChars(BitConverter.GetBytes(x));
wskaźnik konwersji, 100000 kleszcze:
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 kleszcze:
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;
}
- 1. JavaScript - konwersja liczby całkowitej na tablicę bitów
- 2. konwersja liczby całkowitej na listę w pythonie
- 3. Konwersja liczby całkowitej na adres IP
- 4. Konwersja daty do liczby całkowitej w Javie
- 5. podwójna konwersja do liczby całkowitej w java
- 6. Ada95: Konwersja liczby całkowitej do postaci
- 7. konwersja tablicy ciąg do liczby całkowitej tablicę
- 8. Konwersja ciąg do liczby całkowitej, używając mapy()
- 9. Konwersja wykładniczej do liczby całkowitej w PHP
- 10. Znaleźć długość ciągu liczby całkowitej w .NET
- 11. Konwersja 32-bitowej liczby całkowitej na 4 bajty danych w javascript
- 12. Wykrywanie przepełnienia liczby całkowitej
- 13. Konwersja String spacjami do liczby całkowitej w java
- 14. serwer MS SQL - konwersja HEX ciąg do liczby całkowitej
- 15. SQL Server Konwersja liczby całkowitej do łańcucha binarnego
- 16. Zaokrąglanie liczby całkowitej do najbliższej wielokrotności innej liczby całkowitej
- 17. Konwersja number Peano S (N) do liczby całkowitej w Prologu
- 18. Wykrywanie przepełnienia liczby całkowitej
- 19. C++ Sprawdzanie liczby całkowitej.
- 20. Dzielenie liczby całkowitej w Pythonie?
- 21. Ustawienie wartość logiczną na podstawie liczby całkowitej
- 22. Dzielenie liczby całkowitej na jej oddzielne cyfry
- 23. Binarny ciąg do liczby całkowitej z "atoi()"
- 24. Sprawdzanie poprawności liczby całkowitej z formularza
- 25. Kontrola przekroczenia liczby całkowitej SSE2
- 26. Testowanie kuriozum liczby całkowitej z operatorem modulo
- 27. C tylko znak liczby całkowitej
- 28. Dlaczego C++ pozwala na przypisanie liczby całkowitej do ciągu?
- 29. Vimdiff: wyświetlanie całkowitej liczby zmian
- 30. Alter kolumna PostgreSQL z liczby całkowitej na liczbę dziesiętną
Czego można oczekiwać na znaki być? Interpretacja bajtów ASCII? –
Masz na myśli znaki lub bajty? Znaki to pojedyncze znaki tekstu w danym kodowaniu, które mogą odpowiadać wielu bajtom - prawdopodobnie nie to, co chcesz. –