Ich habe 20byte binäre Char-Array. Ich möchte in 3 Teile teilen: 4byte, 8byte, 8byte. Ich habe es wie folgt implementiert. Es funktioniert, aber es scheint, ich könnte Puffer-Stream verwenden. Ich möchte wissen, wie man es benutzt. JetztBinär Char Array in Stringstream und Pop aus dem Puffer
void main()
{
// _data is 20byte binary char array. 0000000000000000000000000000000000000000000001111001110001111111001110000010110000001011101101000000000000000000000000000000000000000000000000000000000000000001
// strA (4 byte)
string strA;
for (std::size_t i = 0; i < 4; ++i) {
strA += bitset<8>(_data.c_str()[i]).to_string();
}
cout << strA << endl; // 00000000000000000000000000000000
// strB (8 byte)
string strB;
for (std::size_t i = 4; i < 12; ++i) {
strB += bitset<8>(_data.c_str()[i]).to_string();
}
cout << strB << endl; // 0000000000000111100111000111111100111000001011000000101110110100
// strC (8 byte)
string strC;
for (std::size_t i = 12; i < 20; ++i) {
strC += bitset<8>(_data.c_str()[i]).to_string();
}
cout << strC << endl; // 0000000000000000000000000000000000000000000000000000000000000001
}
Erwartung
Ich möchte wie diese implementieren.
void main()
{
stringstream ss = _data;
strA = ss.pop(4);
strB = ss.pop(8);
strC = ss.pop(8);
}
Update 1
Danke Jungs. Ich versuche alle Antworten, die du mir gegeben hast, eins nach dem anderen. Ich bin Neuling in C++, also braucht es Zeit, es zu verstehen. Das Folgende ist Anders Ks.
struct S { char four[4]; char eight1[8]; char eight2[8]; };
struct S *p = reinterpret_cast<S*>(&_data);
cout << p->four << endl; // => Output "(" I think I can find way to output
aktualisieren 2
Es string :: substr arbeitet mit. Danke Zakir.
int main()
{
// I don't know how to change to string value in smart way..
string str;
for (std::size_t i = 0; i < _data.size(); ++i) {
str += bitset<8>(_data.c_str()[i]).to_string();
}
cout << str << endl; // 0000000000000000000000000000000000000000000001111001110001111111001110000010110000001011101101000000000000000000000000000000000000000000000000000000000000000001
std::string d = str; // Your binary stream goes here
int lenA = (4*8); // First 4 Bytes
int lenB = (8*8); // Second 8 Bytes
int lenC = (8*8); // Last 8 Bytes
std::string strA = d.substr(0, lenA);
std::string strB = d.substr(lenA + 1, lenB - 1);
std::string strC = d.substr(lenA + lenB + 1, lenC - 1);
cout << strA << endl; // 00000000000000000000000000000000
cout << strB << endl; // 000000000000111100111000111111100111000001011000000101110110100
cout << strC << endl; // 000000000000000000000000000000000000000000000000000000000000001
}
Update 3
bekam ich einen Fehler, wenn ich Scheff Weg versuchen. Das ist meine Schuld und ich denke ich kann es lösen. Und ich denke, ich sollte über Datas Typ nachdenken.
int main
{
const char data = _data;
const char *iter = data;
string strA = pop(iter, 4);
string strB = pop(iter, 8);
string strC = pop(iter, 8);
cout << "strA: '" << strA << "'" << endl;
cout << "strB: '" << strB << "'" << endl;
cout << "strC: '" << strC << "'" << endl;
}
Make Fehlermeldung
error: no viable conversion from 'string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') to
'const char'
const char data = _data;
Warum wollen Sie eine 'stringstream' und kein' string' verwenden? Und 'void main()' sollte 'int main()' – Curious
Wäre es nicht einfacher, sie in einer 'struct' oder' class' zu gruppieren? Diese Teile müssen bestimmte Namen haben, so dass die Gruppierung einfacher ist. Wenn Sie eine 'Klasse' verwenden, können Sie interne Details einschließen und eine nette Schnittstelle für den Zugriff auf diese drei Teile freilegen. – Azeem
warum nicht etwas wie 'struct S {char vier [4]; char acht1 [8]; char acht2 [8]; }; Struktur S * p = reinterpret_cast
(& _data [0]); 'scheint ansonsten wie Overkill. –