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

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top