String in bytearray
-
Ich brauche Hilfe um einen String in ein Bytearray umzuwandeln oder am besten ein WORD in 2 BYTES umwandeln.
Ich habe ein Ansistring von den ich aber den Wert jedes einzelnen Bytes brauch, da jeder Buchstabe in Ansistring aber aus 2 Bytes besteht komme ich nicht weiter.
Bis jetzt habe ich folgenden Code:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { Memo1->Lines->Add("Server ClientRead from"+Socket->RemoteHost+":"+String(Socket->RemotePort)); String s=""; String r=""; char hexvaluestring[11]=""; s=Socket->ReceiveText(); for(int i=1;i<=s.Length();i++){ strcpy(hexvaluestring,""); sprintf(hexvaluestring,"%02x",s[i]); r+=String(hexvaluestring); r+=" "; } Memo2->Lines->Add(r); ClientSocket1->Socket->SendText(s); }Aber wie gesagt ich brauche die eizelnen Bytes aus den Ansistring der mir über
s=Socket->ReceiveText(); gegeben wird.Vielen dank im voraus.
mfg Eles
-
Ich bin mir nicht so ganz sicher, ob ich dich richtig verstanden habe. Sag mal was dazu:
#include <string> #include <sstream> #include <iterator> #include <algorithm> #include <iostream> using namespace std; string as_bytes(const string& input) { stringstream output; output<<hex; ostream_iterator<int> out_it (output," "); copy (input.begin(), input.end(), out_it ); return output.str(); } int main() { string test="Hallo Welt!"; cout << as_bytes(test) << endl; }
-
Naja fast

Also ich habe sozusagen ein WORD, brauche dieses WORD aber in 2 BYTEs.
-
Byte01 = static_cast<BYTE>(DeinWord); Byte02 = static_cast<BYTE>(DeinWord >> (sizeof(Byte02) * 8));
-
Die erste Zeile:
Byte01 = static_cast<BYTE>(DeinWord);funktioniert genau wie ich es mir vorgestellt habe
Nur bei der zweiten Zeile:
Byte02 = static_cast<BYTE>(DeinWord >> (sizeof(Byte02) * 8);bring mein Compiler (RAD Studio XE) eine kleine Fehlermeldung:
[BCC32 Fehler] Unit1.cpp(60): E2293 ) erwartet
und markiert die beiden ">>" in der zweiten Zeile.
-
Peinlich. Ich habe eine Klammer vergessen. Ich habe den Code schon überarbeitet.
-
Ausgezeichnet!
Vielen dank, funktioniert super!
Wie bekomme ich jetzt diese 2 Bytes wieder zu ein Word?
-
DeinWord = Byte02; DeinWord <<= sizeof(Byte02); DeinWord |= Byte01;
-
Super, vielen dank, wiedermal etwas dazu gelernt

-
std::uint16_t word = (static_cast<std::uint16_t>(Byte02) << 16) | Byte01;
-
Eine Frage noch, wie bekommen ich ein ByteArray[1024] mit also 1024 Elementen in ein DWORD und zwar nur 4 bestimmte Elemente? z.B. [21] bis [24]?
Habe es so gemacht, sieht aber ziemlich unschön aus:
WORD1=ByteArray[21]; WORD1<<=sizeof(ByteArray[21]); WORD1|= ByteArray[22]; WORD2=ByteArray[23]; WORD2<<=sizeof(ByteArray[23]); WORD2|= ByteArray[24]; DWORD1=WORD1; DWORD1<<=sizeof(WORD1); DWORD1|=WORD2;Gibt bestimmt eine schönere Lösung über die ich sehr dankbar wäre

-
DeinDWORD = static_cast<DWORD>(Bytearray[21]);