Kürzlich las ich (wieder) über 'endian'ness. Ich weiß, wie man den endianess des Wirtes identifiziert, da es viel Post auf SO gibt, und ich auch this gesehen habe, das ich denke, ist ziemlich gute Quelle.Endianness von binären Dateidaten erkennen
Eine Sache, die ich gerne wissen möchte, ist, wie man die Endianität der eingegebenen Binärdatei erkennt. Zum Beispiel lese ich eine Binärdatei (mit C++
) wie folgt vor:
ifstream mydata("mydata.raw", ios::binary);
short value;
char buf[sizeof(short)];
int dataCount = 0;
short myDataMat[DATA_DIMENSION][DATA_DIMENSION];
while (mydata.read(reinterpret_cast<char*>(&buf), sizeof(buf)))
{
memcpy(&value, buf, sizeof(value));
myDataMat[dataCount/DATA_DIMENSION][dataCount%DATA_DIMENSION] = value;
dataCount++;
}
ich wissen, wie ich die Endian in der mydata.raw
erkennen kann, und ob endianness wirkt dieses Programm sowieso.
Weitere Informationen:
- Ich Manipulation nur die Daten in
myDataMat
mathematische Operationen verwendet wird, und keine Zeigeroperation oder bitweise Operation auf den Daten durchgeführt). - Meine Maschine (Host) ist Little Endian.
Sie können * endianness einer Binärdatei * nicht erkennen *. Verwenden Sie einfach 'htons' usw., wenn Sie Daten in die Datei schreiben und' ntohs' etc beim Lesen –
Kurz gesagt: Sie können nicht. –
* Ich möchte wissen, wie ich die Endiannität erkennen kann ... * Du kannst es * nicht entdecken *. Entweder enthält die Datei selbst einen Hinweis auf die verwendete Endianz oder Sie haben wenig Glück. Wenn Sie '0x2a00' lesen, können Sie nicht feststellen, ob es' 42' (Little Endian) oder '10752' (Big Endian) ist. –