我正在創建一個數據包發送者。將字符串轉換爲字節併發送()它
用戶可以輸入他們想要在RichTextBox上發送的數據包。
this->packetdata = (gcnew System::Windows::Forms::RichTextBox());
樣品輸入:
03 00 00 13 0e e0 00 00 00 00 00 01 00 08 00 00 00 00 00 03
00 00 6a 02 f0 80 7f 65 82 00 5e 04 01 01 04 01 01 01 01 ff
服務器應該得到:
03 00 00 13 0e e0 00 00 00 00 00 01 00 08 00 00 00 00 00 03
00 00 6a 02 f0 80 7f 65 82 00 5e 04 01 01 04 01 01 01 01 ff
但服務器接收到這個來代替:
30 33 20 30 30 20 30 30 20 31 33 20 30 65 20 65 03 00 00 13 0e e
30 20 30 30 20 30 30 20 30 30 20 30 30 20 30 30 0 00 00 00 00 00
20 30 31 20 30 30 20 30 38 20 30 30 20 30 30 20 01 00 08 00 00
30 30 20 30 30 20 30 30 20 30 33 0a 30 30 20 30 00 00 00 03.00 0
30 20 36 61 20 30 32 20 66 30 20 38 30 20 37 66 0 6a 02 f0 80 7f
20 36 35 20 38 32 20 30 30 20 35 65 20 30 34 20 65 82 00 5e 04
30 31 20 30 31 20 30 34 20 30 31 20 30 31 20 30 01 01 04 01 01 0
31 20 30 31 20 66 66 20 1 01 ff
如何轉換數據在RichTextBox
刪除所有空間並將每個字節視爲字節併發送。
這種方法有效,但:
char this[] = {0x03, 0x00, 0x00, 0x13, 0x0e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03
0x00, 0x00, 0x6a, 0x02, 0xf0, 0x80, 0x7f, 0x65, 0x82, 0x00, 0x5e, 0x04, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0xff}
與該代碼,服務器接收正確的數據。
那麼如何將文本框內的文本變成類似的東西?
這工作
int mysendfunc(char *sendbuf, int size);
(...)
std::string inputpkt = marshal_as<std::string>(this->packetdata->Text);
std::istringstream reader(inputpkt);
std::vector<char> pkt;
do
{
// read as many numbers as possible.
for (int number; reader >> std::hex >> number;) {
pkt.push_back(number);
}
// consume and discard token from stream.
if (reader.fail())
{
reader.clear();
std::string token;
reader >> token;
}
}
while (!reader.eof());
int hehe = mysendfunc(pkt.data(), pkt.size());
沒有往上衝的CLI,我不能回答,如果有一個神奇的功能,要做到這一點,我認爲他們這樣做,但是在標準的C++中,我將'istringstream'作爲輸入字符串,然後使用'operator >>()'將格式化的數據抽出,將每個值推入'std :: vector',最後發送'vec.size()'字節來自'vec.data()' –
WhozCraig
2013-04-24 14:28:28
@WhozCraig Th是否可以工作我可以看到一些示例代碼? :) – zikdaljin 2013-04-24 18:44:28
你正在將數據視爲十進制,但它實際上是十六進制。 – 2013-04-24 19:43:25