c ++ string Convertir en octets pour l'envoi sur tcp
-
27-10-2019 - |
Question
Je suis en train d'envoyer une chaîne de 28 caractères à une adresse IP distante et le port. Je l'ai fait en vb.net avec succès en utilisant les extraits de code suivant:
Dim swon As String = "A55A6B0550000000FFFBDE0030C8"
Dim sendBytes As [Byte]()
sendBytes = Encoding.ASCII.GetBytes(swon)
netStream.Write(sendBytes, 0, sendBytes.Length)
Je dois maintenant convertir ce travers à c ++ et ont les éléments suivants jusqu'à présent:
char *swon = "A55A6B0550000000FFFBDE0030C8";
array<Byte>^ sendBuffer = gcnew array<Byte>(bufferSize);
sendBuffer = BitConverter::GetBytes( swon );
tcpStream->Write(sendBuffer, 0, sendBuffer->Length);
mais je suis coincé à ce moment. Je suis sûr que je manque d'une simple erreur de syntaxe, mais je ne peux pas comprendre!
Pour clarifier les choses, je ne reçois pas une erreur, mais je ne pense pas que la chaîne est convertie en octets correctement que quand je reconvertir, je viens d'obtenir un « 01 »
Cordialement, Chris
La solution
Je ne comprends pas pourquoi vous n'êtes pas simplement utiliser les classes du framework .Net exactement le même dans votre ++ / code CLI. par exemple. System::String
pour swon
, Encoding::ASCII
pour produire le tableau d'octets.
Tout ce que vous avez en VB vous pouvez mapper directement vers C ++ / CLI sans utiliser différentes classes - qui est le port easest pour vous. Lorsque vous êtes dans MSDN en ligne, il suffit de sélectionner la vue C++
pour obtenir des exemples de choses que vous voulez faire. Essayez que sur cette page, par exemple: http: // msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx
Autres conseils
Steve est exact que la même logique peut être dupliqué en C ++. Mais le C de la char*
est déjà ASCII, aucune conversion est nécessaire. Juste une copie est tout ce qui est nécessaire.
const char swon[] = { "A55A6B0550000000FFFBDE0030C8" };
array<Byte>^ sendBuffer = gcnew array<Byte>((sizeof swon) - 1);
pin_ptr<Byte> startBuffer = &sendBuffer[0];
memcpy(startBuffer, swon, sendBuffer->Length);
tcpStream->Write(sendBuffer, 0, sendBuffer->Length);