首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SocketStream发送十六进制值

SocketStream发送十六进制值
EN

Stack Overflow用户
提问于 2013-11-08 19:53:14
回答 2查看 1.7K关注 0票数 1

我正在尝试将代码从.c翻译到Delphi。在这个.c应用程序中,所有的套接字通信都是通过十六进制值进行的。第一份来文是:

C代码:无符号字符bufSend1[] ={ 0x00,0x00,0x00,0x00 };

在德尔菲我做了:

SockStream.WriteBuffer(#0#0#0#0,4);

但现在,在C语言中,我有这样的东西:

无符号字符bufSend2[] ={ 0x6f,0x06,0xff };

如何通过套接字流发送这些值?#0#0#0#0有什么正确的方法来做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 19:58:56

只需使用十六进制符号将其编码为Delphi字符即可。

在Delphi中,十六进制由$前缀表示,#表示Char。因此,与您的bufSend2值等效的是:

代码语言:javascript
复制
SocketStream.WriteBuffer(#$6f#$06#$ff, 3);

#表示下一个值是Char$6f表示十六进制值(相当于C中的0x6f )。您只需一个接一个地将它们放在一起,就像您对#0#0#0#0值所做的一样。

一个更好的解决方案是正确地将每个值转换为适当的AnsiChar值,如果要发送少量字符,则可以正常工作:

代码语言:javascript
复制
SocketStream.WriteBuffer(AnsiChar(#$6f) + AnsiChar(#$06) + AnsiChar(#$ff), 3);

然而,最好的解决方案是使用array of Byte

代码语言:javascript
复制
// Static array
var
  Buff: array[0..100] of Byte;


  Buff[0] := $6f;
  Buff[1] := $06;
  Buff[2] := $ff;
  SocketStream.WriteBuffer(Buff[0], 3);

// Dynamic array
var
  Buff: array of Byte;

  SetLength(Buff, 3);
  Buff[0] := $6f;
  Buff[1] := $06;
  Buff[2] := $ff;
  SocketStream.WriteBuffer(Buff[0], Length(Buff));

若要向任一数组添加文本,只需使用Ord(AnsiChar(Letter)),如

代码语言:javascript
复制
var
  s: AnsiString;
  i: Integer;
  Len: Integer;

s := 'Test';
Len := Length(s);
SetLength(Buff, Len);

for i := 1 to Len do    
  Buff[i - 1] := Ord(AnsiChar(s[i]));

SocketStream.WriteBuffer(Buff[0], Len);   
票数 2
EN

Stack Overflow用户

发布于 2013-11-08 21:10:57

我想你是在给TWinSocketStream.Write打电话。声明如下:

代码语言:javascript
复制
function Write(const Buffer; Count: Longint): Longint;

非类型化的const参数可以接收任何信息。您希望传递一个字节数组。这样做有几种方法。例如:

代码语言:javascript
复制
const
  bufSend2: array [0..2] of Byte = ($6f, $06, $ff);
....
SockStream.WriteBuffer(bufSend2, SizeOf(bufSend2));  

代码语言:javascript
复制
SockStream.WriteBuffer(Pointer(TBytes.Create($6f, $06, $ff))^, 3);  

我个人认为我更喜欢前者。更详细一点。但是您不必硬编码字节计数,也可以避免堆分配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19867461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档