S
Isomorphismus schrieb:
??
Also ich hab gar nichts verstanden, simon, was soll ich machen? (bzw worüber soll ich mich schlau machen?)
lg,
Iso
Naja, ich meine halt sowas:
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <iterator>
#include <algorithm>
using namespace std;
struct MyData {
MyData(float af, string const& as, char ac) : f(af), s(as), c(ac) {}
float f;
string s;
char c;
};
string int4digits2BCD(int t) {
char buf[2];
t %= 10000;
buf[0] = (0x10*(t/1000)%10) + (t/100)%10;
buf[1] = (0x10*(t/10)%10) + t%10;
return string(buf, 2);
}
void toVTKFormat(MyData const& m, vector<char>& v) {
float absolut = fabs(m.f);
// 1 Byte: Vorzeichen von f; positiv => '$' ; negativ => '%'
v.push_back(m.f == absolut ? '$' : '%' );
// 4 Bytes: f als <abcd>.<efgh> bcd-codiert Bigendian
int vorkomma = absolut;
string vorkommaBCD(int4digits2BCD(vorkomma));
copy(vorkommaBCD.begin(), vorkommaBCD.end(), back_inserter(v));
int nachkomma = (absolut * 10000) - (vorkomma * 10000);
string nachkommaBCD(int4digits2BCD(nachkomma));
copy(nachkommaBCD.begin(), nachkommaBCD.end(), back_inserter(v));
// 1 Byte Filler
v.push_back('f');
// n Byte: s
copy(m.s.begin(), m.s.end(), back_inserter(v));
// 1 Byte: c
v.push_back(m.c);
}
int main() {
cout << "hello world\n";
MyData m(-1.23f, "Simon2", 'x');
vector<char> VTKData;
toVTKFormat(m, VTKData);
copy(VTKData.begin(), VTKData.end(), ostream_iterator<char>(cout, " "));
return 0;
}
Da fehlen natürlich noch eine Menge Plausiprüfungen und letztlich würde ich das auch über einen operator<<(ostream&, ...) machen, aber der Ansatz wird hoffentlich klar:
toVTKFormat() übernimmt die Formatwandlung auf Byteebene.
Es konvertiert ein MyData-Objekt (mit dem ich gut und bequem in meinem Code arbeiten kann) in ein vordefiniertes Format.
Gruß,
Simon2.