DELPHI 10.2
idTcpServer 控制元件
我現在需要和單片機建立對接,對方只能接受16進制資料,我現在已經將要發送的資料轉成了16進制的格式,如:
C7 44 C7 44 86 34 66 ,然后該如何發給對方?
我現在用:
try
i:=combobox1.Items.IndexOf(combobox1.Text);
ConnContext := TIdContext(idtcpserver1.Contexts.LockList.Items[I]);
conncontext.Connection.IOHandler.writeln(memo1.Text);
finally
IdTCPServer1.Contexts.UnlockList;
end;
單片機能收到我的資料,但對方收到的是一個字串,他會再把這個資料轉成16進制,所以回傳不了我要想要的結果。
請問各們大神如何處理?
uj5u.com熱心網友回復:
你發送的是字串,你要把16進制對應的字串寫入也是可以。或者 writeln 改成 write,直接寫入 TBytes
exam:
var
buf: TBytes;
begin
SetLength(buf,7);
buf[0] := $C7;
buf[1] := $44;
buf[2] := $C7;
...
conncontext.Connection.IOHandler.write(buf);
end;
uj5u.com熱心網友回復:
這個是正解。uj5u.com熱心網友回復:
感謝支持!!!
我現在是從一個檔案里面取出來的這些16進制,資料巨大,
18年的大神呀,幸會,感謝支持。
我這里還是被卡住了,實際上我被繞進去了。
我這里是通過idTcpServer 要發送一個圖片到客戶端去(客戶端有一個顯示屏,接收正常就會顯示我發送的圖片),客戶端只能接受十六進制,我便想到先把圖片轉成16進制后再寫,現在想是越搞越復雜。
能不能給一段代碼?我通過網上找的資料,整理了下面一段,發送有點慢,屏上面會出行一行彩色,沒有出現我要的圖片。
procedure TForm1.Button3Click(Sender: TObject);
var
Mem: TMemoryStream;
bmp:tBitmap;
buf: array of byte;
i,j,bsize:integer;
connContext:Tidcontext;
begin
Mem := TMemoryStream.Create;
bmp:=Tbitmap.Create;
bmp.LoadFromFile('d:\soft\abc.bmp');
bmp.SaveToStream(mem);
bSize:=mem.Size;
setLength(buf,bSize);
Mem.Position := 0;
Mem.Readbuffer(buf[0],bSize);
i:=combobox1.Items.IndexOf(combobox1.Text);
ConnContext := TIdContext(idtcpserver1.Contexts.LockList.Items[I]);
for j := 0 to Bsize do
connContext.Connection.IOHandler.Write(buf[j])
end;
uj5u.com熱心網友回復:
Write 方法可以一次性寫入,不需要一次一個位元組,用 Write(buf) 試下。另外,我看了還有 WriteFile 這個方法,也可以試下。
uj5u.com熱心網友回復:
既然是16進制資料,那發送的應該是字串'C744C744863466'uj5u.com熱心網友回復:
圖片本來就是 16 進制的資料。說白了,計算機里面的資料都是 16 進制的。也都是2進制的。就是一個一個的 Byte 位元組。至于 Indy,它可以發送 TBytes。因此,你的問題是,如何把圖片檔案,轉換為 TBytes。我忘記了 Indy 是否可以直接發送 TStream,如果可以,你的圖片檔案,直接用 TFileStream 加載然后直接發送就可以了。
如果 Indy 不能發送 TStream,那么,你要做的是,搞一個 TBytes,把檔案內容都搬進去。方法就是搞一個 TFileStream 來加載檔案,然后設定 TBytes 的大小和 TFileStream 的大小一樣,然后 TFileStream.ReadBuffer 就可以把它的內容搬進 TBytes。
Indy 好像是用 TIdBytes,一樣的。
另外,向單片機寫資料,要照顧它的速度,小心電腦這邊太快,單片機忙不過來出問題。
uj5u.com熱心網友回復:
這個我做過,但是我是通過WEBSERVICE來接收對方發來的JPG圖片,我把代碼貼一下,希望對你有幫助。這是服務端的代碼,因為XML傳入的是一個string,所以我接收這個string并轉換成jpeg然后保存到資料庫。


以下是客戶端,如何把一個jpeg轉成一個標準的XML


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/11188.html
標籤:網絡通信/分布式開發
