ARP_HDR = packed record
HardwareType: WORD;
ProtocolType: WORD;
HLen: UCHAR;
PLen: UCHAR;
Operation: WORD;
SenderHA: MACADDRESS;
SenderIP: DWORD;
TargetHA: MACADDRESS;
TargetIP: DWORD;
end;
10 个解决方案
#1
顶!
#2
最简单的方法:把记录中的每一个元素都转换成String,然后加上分隔符进行拼接成String的数据包!
#3
TTestRec = record
a: Integer;
b: Integer;
c: array[0..10] of Char;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
t: TTestRec;
buf: array[0..30] of Char;
s, s1: string;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
wsprintf(buf, PChar(s1));
s := buf;
ShowMessage(s);
end;
a: Integer;
b: Integer;
c: array[0..10] of Char;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
t: TTestRec;
buf: array[0..30] of Char;
s, s1: string;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
wsprintf(buf, PChar(s1));
s := buf;
ShowMessage(s);
end;
#4
to beyondtkl(大龙驹<*学习祖国医学中,国粹,路在何方?*>)
你的方法主要用到的是下面这句
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
这样,的确是可以达到目的,但是如果还要还原那就麻烦了
所以可以改成如下:
s1 := Format'%d,%d,%s',[t.a, t.b, t.c]);
以','字符来分隔之
但这样也有一定的局限性,即t.c中不应包含','字符
你的方法主要用到的是下面这句
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
这样,的确是可以达到目的,但是如果还要还原那就麻烦了
所以可以改成如下:
s1 := Format'%d,%d,%s',[t.a, t.b, t.c]);
以','字符来分隔之
但这样也有一定的局限性,即t.c中不应包含','字符
#5
如果你是为了在网络里传输,还不如写个简单的类,传对象过去,
那样问题就容易解决多了:类(对象).属性,接收短只要有该类的定义就行了,你用record就不方便了
那样问题就容易解决多了:类(对象).属性,接收短只要有该类的定义就行了,你用record就不方便了
#6
楼主要把它加在一起做什么呢?有什么用呢?如果要传输的话,传递结构体指针啊。
#7
>>如何将下面的record 类型转换成 string类型,即string类型的数据报。
你的想法, 不不好,
用 string, 很容易出bug,
但也可解决, 用 TStringStream 就可
sm: TStringStream;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
sm := TStringStream.Create('');
sm.Write((@t)^, sizeof(TTestRec));
sm.DataString ;// 你要的
sm.Free;
你的想法, 不不好,
用 string, 很容易出bug,
但也可解决, 用 TStringStream 就可
sm: TStringStream;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
sm := TStringStream.Create('');
sm.Write((@t)^, sizeof(TTestRec));
sm.DataString ;// 你要的
sm.Free;
#8
to dabaicai(菜鸟)
在网络里传对象?用什么方式传?值传递还是指针传递?
to Delphityro(不吃腥的猫)
网络里怎么传递结构体指针?
在网络里传对象?用什么方式传?值传递还是指针传递?
to Delphityro(不吃腥的猫)
网络里怎么传递结构体指针?
#9
还是C/C++好
struct A a;
struct A pb;
char *pa;
pa = (char *)&a;
pb = (struct A*)pa;
直接转换 即可 好像delphi不行呢。。
网络里怎么传递结构体指针?
// 当成 字符串传就是 接受的时候进行转换就OK。
struct A a;
struct A pb;
char *pa;
pa = (char *)&a;
pb = (struct A*)pa;
直接转换 即可 好像delphi不行呢。。
网络里怎么传递结构体指针?
// 当成 字符串传就是 接受的时候进行转换就OK。
#10
看了一下 beyondtkl(大龙驹<*学习祖国医学中,国粹,路在何方?*>)
和 aiirii(ari-淘金坑)的代码
是不是可以这样理解:
先把结构体的内存块复制下来,
通过流或字符串的方式进行传递,
收到以后,再用指针指向收到的内存块?
不过Delphi里类型检查比较严格,转换起来恐怕很难啊
COM和Webservice里对传递自定义类型都有比较好的办法
建议楼主采用
和 aiirii(ari-淘金坑)的代码
是不是可以这样理解:
先把结构体的内存块复制下来,
通过流或字符串的方式进行传递,
收到以后,再用指针指向收到的内存块?
不过Delphi里类型检查比较严格,转换起来恐怕很难啊
COM和Webservice里对传递自定义类型都有比较好的办法
建议楼主采用
#1
顶!
#2
最简单的方法:把记录中的每一个元素都转换成String,然后加上分隔符进行拼接成String的数据包!
#3
TTestRec = record
a: Integer;
b: Integer;
c: array[0..10] of Char;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
t: TTestRec;
buf: array[0..30] of Char;
s, s1: string;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
wsprintf(buf, PChar(s1));
s := buf;
ShowMessage(s);
end;
a: Integer;
b: Integer;
c: array[0..10] of Char;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
t: TTestRec;
buf: array[0..30] of Char;
s, s1: string;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
wsprintf(buf, PChar(s1));
s := buf;
ShowMessage(s);
end;
#4
to beyondtkl(大龙驹<*学习祖国医学中,国粹,路在何方?*>)
你的方法主要用到的是下面这句
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
这样,的确是可以达到目的,但是如果还要还原那就麻烦了
所以可以改成如下:
s1 := Format'%d,%d,%s',[t.a, t.b, t.c]);
以','字符来分隔之
但这样也有一定的局限性,即t.c中不应包含','字符
你的方法主要用到的是下面这句
s1 := Format('%d%d%s', [t.a, t.b, t.c]);
这样,的确是可以达到目的,但是如果还要还原那就麻烦了
所以可以改成如下:
s1 := Format'%d,%d,%s',[t.a, t.b, t.c]);
以','字符来分隔之
但这样也有一定的局限性,即t.c中不应包含','字符
#5
如果你是为了在网络里传输,还不如写个简单的类,传对象过去,
那样问题就容易解决多了:类(对象).属性,接收短只要有该类的定义就行了,你用record就不方便了
那样问题就容易解决多了:类(对象).属性,接收短只要有该类的定义就行了,你用record就不方便了
#6
楼主要把它加在一起做什么呢?有什么用呢?如果要传输的话,传递结构体指针啊。
#7
>>如何将下面的record 类型转换成 string类型,即string类型的数据报。
你的想法, 不不好,
用 string, 很容易出bug,
但也可解决, 用 TStringStream 就可
sm: TStringStream;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
sm := TStringStream.Create('');
sm.Write((@t)^, sizeof(TTestRec));
sm.DataString ;// 你要的
sm.Free;
你的想法, 不不好,
用 string, 很容易出bug,
但也可解决, 用 TStringStream 就可
sm: TStringStream;
begin
t.a := 10;
t.b := 20;
StrCopy(t.c, PChar('Hello World'));
sm := TStringStream.Create('');
sm.Write((@t)^, sizeof(TTestRec));
sm.DataString ;// 你要的
sm.Free;
#8
to dabaicai(菜鸟)
在网络里传对象?用什么方式传?值传递还是指针传递?
to Delphityro(不吃腥的猫)
网络里怎么传递结构体指针?
在网络里传对象?用什么方式传?值传递还是指针传递?
to Delphityro(不吃腥的猫)
网络里怎么传递结构体指针?
#9
还是C/C++好
struct A a;
struct A pb;
char *pa;
pa = (char *)&a;
pb = (struct A*)pa;
直接转换 即可 好像delphi不行呢。。
网络里怎么传递结构体指针?
// 当成 字符串传就是 接受的时候进行转换就OK。
struct A a;
struct A pb;
char *pa;
pa = (char *)&a;
pb = (struct A*)pa;
直接转换 即可 好像delphi不行呢。。
网络里怎么传递结构体指针?
// 当成 字符串传就是 接受的时候进行转换就OK。
#10
看了一下 beyondtkl(大龙驹<*学习祖国医学中,国粹,路在何方?*>)
和 aiirii(ari-淘金坑)的代码
是不是可以这样理解:
先把结构体的内存块复制下来,
通过流或字符串的方式进行传递,
收到以后,再用指针指向收到的内存块?
不过Delphi里类型检查比较严格,转换起来恐怕很难啊
COM和Webservice里对传递自定义类型都有比较好的办法
建议楼主采用
和 aiirii(ari-淘金坑)的代码
是不是可以这样理解:
先把结构体的内存块复制下来,
通过流或字符串的方式进行传递,
收到以后,再用指针指向收到的内存块?
不过Delphi里类型检查比较严格,转换起来恐怕很难啊
COM和Webservice里对传递自定义类型都有比较好的办法
建议楼主采用