W każdym razie, dla każdego formatu pliku, jestem pewien, że możesz napisać jeden wiersz, aby przekonwertować jego endianność za pomocą Perla i spakuj / rozpakuj . W przypadku niektórych formatów będzie to po prostu dłuższa linia niż w przypadku innych formatów. ;-)
Ilmari Karonen
Odpowiedzi:
34
Nie możesz tego zrobić, ponieważ do takiej konwersji musisz znać znaczenie treści binarnej.
Jeśli np. W pliku binarnym znajduje się ciąg, nie można go przekonwertować, a 4-bajtowa liczba całkowita może wymagać innego traktowania niż dwubajtowa liczba całkowita.
Innymi słowy, do konwersji kolejności bajtów potrzebny jest opis typu danych.
Miałem tylko to powiedzieć. nie jest to tak proste, jak zamiana każdej pary bajtów. na przykład 4 bajtowa liczba całkowita 01 02 03 04 w bigendianie może wyglądać tak w małej endianie 04 02 03 01 NOT 02 01 04 03 cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html
Rob
1
Zgadzam się, endianizm nie ma sensu w surowym, pozbawionym typów strumieniu bajtów ... to powinna być zaakceptowana odpowiedź, jeśli OP nie edytuje swojego pytania
Thomas
[potrzebne źródło] - AFAIK, chyba że aplikacja jednoznacznie zachowuje pewną kolejność bajtów, a nie inne, to zwykle bajty lub słowa są uporządkowane konsekwentnie przez cały czas.
Wstrzymano do odwołania.
1
@DennisWilliamson: Ciąg UTF-8 lub ASCII nie ma endianizmu. UTF-8 określa kolejność bajtów, podczas gdy ASCII jest 7-bitowy i nie ma tokenów wielobajtowych. Łańcuch UTF-16 ma endianowość i może mieć lub nie BOM do oznaczenia tej endianizmu. Plik binarny uniksowy, który ma wchodzić w interakcje z systemem Windows lub Javą, może zawierać oba typy ciągów, co oznacza, że musisz je rozróżnić podczas konwersji.
Kevin
Przybyłem tutaj, szukając programu, w którym podajesz opis danych i dane, a on je konwertuje. Do tej pory nie znalazłem takiego programu, ale to nie znaczy, że nie można tego zrobić.
Levi Morrison,
32
Możesz zamieniać bajtami za pomocą dd. Czy to wystarczy? Jeśli nie, zaktualizuj swoje pytanie, podając przykładowy plik wejściowy i oczekiwany plik wyjściowy.
Jeśli nie obchodzi Cię zawartość pliku i po prostu chcesz zamienić bajty, spróbuj endconv . Jest to tylko opakowanie wokół standardowych funkcji konwersji bajtów, więc obsługuje konwersję liczb całkowitych o długości 2, 4 i 8 bajtów. Nie jest to jednak jedna linijka, ponieważ jest to osobny program.
Odpowiedzi:
Nie możesz tego zrobić, ponieważ do takiej konwersji musisz znać znaczenie treści binarnej.
Jeśli np. W pliku binarnym znajduje się ciąg, nie można go przekonwertować, a 4-bajtowa liczba całkowita może wymagać innego traktowania niż dwubajtowa liczba całkowita.
Innymi słowy, do konwersji kolejności bajtów potrzebny jest opis typu danych.
źródło
Możesz zamieniać bajtami za pomocą
dd
. Czy to wystarczy? Jeśli nie, zaktualizuj swoje pytanie, podając przykładowy plik wejściowy i oczekiwany plik wyjściowy.źródło
Jeśli nie obchodzi Cię zawartość pliku i po prostu chcesz zamienić bajty, spróbuj endconv . Jest to tylko opakowanie wokół standardowych funkcji konwersji bajtów, więc obsługuje konwersję liczb całkowitych o długości 2, 4 i 8 bajtów. Nie jest to jednak jedna linijka, ponieważ jest to osobny program.
źródło
Aby zmienić endianizm pliku, przy założeniu rozmiaru słowa (32-bitowego), ten 1 linijka powinien działać dla Ciebie:
źródło