1

28文字の文字列をリモートIPアドレスとポートに送信しようとしています。次のコードスニペットを使用して、vb.netでこれを正常に実行しました。

Dim swon As String = "A55A6B0550000000FFFBDE0030C8"
Dim sendBytes As [Byte]()
sendBytes = Encoding.ASCII.GetBytes(swon)
netStream.Write(sendBytes, 0, sendBytes.Length)

これをc++に変換する必要があり、これまでのところ次のようになっています。

char *swon = "A55A6B0550000000FFFBDE0030C8";
array<Byte>^ sendBuffer = gcnew array<Byte>(bufferSize);
sendBuffer = BitConverter::GetBytes( swon );
tcpStream->Write(sendBuffer, 0, sendBuffer->Length);

しかし、この時点で立ち往生しています。単純な構文エラーがないことは確かですが、理解できません。

明確にするために、エラーは発生していませんが、文字列が正しくバイトに変換されているとは思いません。逆に変換すると、「01」が表示されるだけです。

乾杯、クリス

4

2 に答える 2

3

++/CLI コードでまったく同じ .Net フレームワーク クラスを使用していない理由がわかりません。例えば。System::Stringfor swonEncoding::ASCIIバイト配列を生成します。

VB で行ったことはすべて、別のクラスを使用せずに C++/CLI に直接マップできます。これが最も簡単なポートです。MSDN オンラインでは、ビューを選択するだけで、C++やりたいことの例を取得できます。たとえば、このページで試してみてください: http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx

于 2011-06-13T15:55:37.633 に答える
0

同じロジックを C++ で複製できるという Steve の指摘は正しいです。ただし、C++char*は既に ASCII であるため、変換は必要ありません。必要なのはコピーだけです。

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);
于 2011-06-14T12:40:33.670 に答える