c ++ Converte string em bytes para enviar por tcp
-
27-10-2019 - |
Pergunta
Estou tentando enviar uma string de 28 caracteres para um endereço IP e porta remotos.Fiz isso com sucesso no vb.net usando os seguintes snippets de código:
Dim swon As String = "A55A6B0550000000FFFBDE0030C8"
Dim sendBytes As [Byte]()
sendBytes = Encoding.ASCII.GetBytes(swon)
netStream.Write(sendBytes, 0, sendBytes.Length)
Agora tenho que converter isso para c ++ e tenho o seguinte até agora:
char *swon = "A55A6B0550000000FFFBDE0030C8";
array<Byte>^ sendBuffer = gcnew array<Byte>(bufferSize);
sendBuffer = BitConverter::GetBytes( swon );
tcpStream->Write(sendBuffer, 0, sendBuffer->Length);
mas estou ficando preso neste ponto.Tenho certeza de que estou perdendo um erro de sintaxe simples, mas não consigo descobrir!
Para esclarecer, não estou recebendo um erro, mas não acho que a string está sendo convertida em bytes corretamente, pois quando converti de volta, acabei de receber um '01'
Saúde, Chris
Solução
Não entendo por que você não está usando exatamente as mesmas classes de estrutura .Net em seu código ++ / CLI.por exemplo.System::String
para swon
, Encoding::ASCII
para produzir a matriz de bytes.
Tudo o que você fez no VB pode mapear diretamente para C ++ / CLI sem usar classes diferentes - essa é a porta mais fácil para você.Quando você estiver no MSDN online, basta selecionar a visualização C++
para obter exemplos do que deseja fazer.Tente nesta página, por exemplo: http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx
Outras dicas
Steve está correto ao dizer que a mesma lógica pode ser duplicada em C ++.Mas o char*
C ++ já é ASCII, nenhuma conversão é necessária.Basta uma cópia.
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);