big-endian/ little-endian byte ordering
-
Ich lese binäre Dateien...
. . . using namespace std; int main() { vector<double> VecDouble; double x; ifstream file("BinFile.activations",ios::in|ios::binary); file.seekg( 0, ios_base::beg ); while(!file.eof()) { file.read( (char *)(&x),sizeof(double)); VecDouble.push_back(x); } }
Welche manipulator soll ich benutzen, um Machienenformat einzugeben...
Im MatLab schreibe ich: data =fread(fid,[m n], 'float', 'b'); wo Parameter 'b' bedeutet 'big- endian' ...
Wie übersetze ich das in C++??
-
Geht nicht.
-
Alles ist möglich! Ich glaube nicht, dass ich die erste bin, die binäre Dateien in 'big-endian' format auf ein PC einlesen möchte.
Im schlimmsten Fall schreibe ich mir die eigene Funktion, die die Umwandlung big-endian->little-endian macht...
Aber ich dachte die profis haben bessere Ideen...
-
Schau dir mal man: htonl und Kollegen an, womöglich ist da das richtige dabei
-
Danke CStoll... es ist genau,was ich brauche
ABER after Download habe ich eine Datei man.cgi und
Wie öffne ich DIE??
Wo kann ich die Funktion htonl finden?
-
carmen schrieb:
ABER after Download habe ich eine Datei man.cgi und
Wie öffne ich DIE??ETWAS genauer bitte? Sonst antworte ich Dir: Mit ifstream file("man.cgi") z.B.
Wo kann ich die Funktion htonl finden?
Erster Treffer Google: http://www.opengroup.org/onlinepubs/007908799/xns/htonl.html
Ist aber Systemabhängig, mein Linux findet es z.B. in <netinet/in.h>, also am Besten die lokale Systemdoku mal fragen
-
OK!Ich Wollte unbedingt die Daten sehen und ich hatte es eillig...CStoll hat mir einLink geschieckt aber nach dem Download konnte ich es nicht mehr weiter ...
Ich reformuliere:
Ich programmiere unter WINDOWS(mit Visual.NET 2003) und ich wollte wissen welches Header soll ich benutzen, um mit htonl zu arbeiten?Ich habe diese Function in Winsock2.h gefunden, aber es funktioniert noch nicht...
Also ich hoffe, dass mein Deutsch diesmal jetzt deutlicher war...
-
float FloatSwap( float f ) { union { float f; unsigned char b[4]; } dat1, dat2; dat1.f = f; dat2.b[0] = dat1.b[3]; dat2.b[1] = dat1.b[2]; dat2.b[2] = dat1.b[1]; dat2.b[3] = dat1.b[0]; return dat2.f; }
und hier ist eine einfache Funktion und ich brauche jetzt nur bessere und ellegantere Ideen...
-
Siehe auch http://c-plusplus.net/forum/viewtopic-var-t-is-140906-and-highlight-is-.html
Die perfekte Lösung steht aber noch aus...
-
Danke scrontch!
diese Idee ist wirklich schön!template<typename T> T swap_endianess(T o) { typedef char byte_t; byte_t *ptr = reinterpret_cast<byte_t*>(&o); for(std::size_t i = 0; i < sizeof(o)/2; ++i) { byte_t t = ptr[i]; ptr[i] = ptr[sizeof(o) - i - 1]; ptr[sizeof(o) - i - 1] = t; } return *reinterpret_cast<T*>(ptr); }
Auf jeden Fall ich kann jetzt meine Daten sehen....
Danke Leute...Carmen