大家看看这句话的意思 plongint是个指针,返回LONGINT型指针吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PLongInt应该是一个LongInt型的指针,把rpack.Buf转换成PLongInt然后取他的值?不太清楚帮你up PLongInt=^Integer;把Buf缓冲区强制转换成LongInt的值。相当于把Buf[0],Buf[1],Buf[2],Buf[3]组合到一起,转换成一个LongInt的类型的值。 我再说明下:这个buf是4字节的,而且就是包含包长度的数据。那么,为什么是用:rpack.packlen := PLongInt(rpack.Buf)^而不用: rpack.packlen := LongInt(rpack.Buf)为什么非要用指针类型? 应该是你理解上的错误,实际上应该是在Buf这个缓冲区里定义了自己的报文结构,前面4个字节为数据包长度,后面为其他数据,这样接受到数据时,先取缓冲区的前4个字节,就能够得到数据包的长度,这样便于后面的通讯处理以及校验等等。 意思我知道了,只是不明白为什么要这样接。对方发送了一个4字节的东西,是个长整型。我用了个pchar来接受,但是调试的时候看到这个pchar的数值是"<"之类的怪字符,而不是想象中的"1234"之类的数据。非要我用Plongint(..)^把它转一下才能看到正确的数值。大哥能说说原因?是按字符发送方式和按其他方式发送的数据,看到的会不一样的吗? rpack.Buf是个指针,转换成PLongInt后再从该指针所指地址取出LongInt值(用^)。比方说AAA是一指针,AAA^就是AAA所指地址存放的值。 赞同gzmhero(hihihi)integer要占用4个byte,也就是说4个byte合在一起才能表示一个integer类型的数字,要是你只看其中的一个byte,当然只能看到怪码啦要看到字符,就按字符发呀 rpack.Buf是一个指向一片内存缓冲区的指针,这片内存的头四个字节表示一个长度。如果用 LongInt(rpack.Buf)只能是把一个指针值转换为一个整型值,而PLongInt(rpack.Buf)是把一个字符指针转换成了整型数指针,以便PLongInt(rpack.Buf)^取得那四个字节表示的整型数(长度)。你调试时看见了pchar的数值是"<"之类的怪字符是因为rpack.Buf的类型是pchar,Delphi的调试器自然把它看成了字符指针,缓冲区里面含有各种各样的字节值,如"<"的ASCII值60,然后按字符的方式显示了出来。pchar是一个比较通用的表示缓冲区的中间类型,就象在早期的C程序中多用char *来表示内存一样(malloc返回char *类型),但实际上这片内存是有结构的(比如说,前四个字节表示长度,而后是缓冲区的内容,其长度由头四个字节决定)。另外,你是在编socket程序,socket库是用C来实现的,而其缓冲区就是用char *来表示,在C中,以字符指针指向的缓冲区并无什么标志来表示其结束的地方(如果是字符串,可以以'\0'结尾,但一般的数据缓冲区内容可能包含了这个数,所以无法以它来作为结尾),因此需要一个长度值来指示,并保证不会存取越界。说得比较罗索,呵呵。 access 隐藏表 delphi ado 事務 可以回滾 多條 insert 嗎 散个分,给各位助个兴 为什么我的ado连接sqlserver,连接字是对的,但是考下来放到代码里,总提示错误? 求助! 请问这是个什么错误? 我的程序在别人的机器上运行不到 窗口融合的问题 如何可以取得DNS Server的IP 求高效的查询算法和较为完整的解决方案 如何使listbox各行的字体颜色不同? paradox数据库表导出excel的问题
把rpack.Buf转换成PLongInt
然后取他的值?不太清楚帮你up
把Buf缓冲区强制转换成LongInt的值。相当于把Buf[0],Buf[1],Buf[2],Buf[3]组合到一起,转换成一个LongInt的类型的值。
那么,为什么是用:rpack.packlen := PLongInt(rpack.Buf)^
而不用: rpack.packlen := LongInt(rpack.Buf)
为什么非要用指针类型?
结构,前面4个字节为数据包长度,后面为其他数据,这样接受到数据时,先取
缓冲区的前4个字节,就能够得到数据包的长度,这样便于后面的通讯处理以及
校验等等。
对方发送了一个4字节的东西,是个长整型。
我用了个pchar来接受,但是调试的时候看到这个pchar的数值是"<"之类的怪字符,而
不是想象中的"1234"之类的数据。非要我用Plongint(..)^把它转一下才能看到正确的数值。
大哥能说说原因?是按字符发送方式和按其他方式发送的数据,看到的会不一样的吗?
比方说AAA是一指针,AAA^就是AAA所指地址存放的值。
integer要占用4个byte,也就是说4个byte合在一起才能表示一个integer类型的数字,要是你只看其中的一个byte,当然只能看到怪码啦要看到字符,就按字符发呀
PLongInt(rpack.Buf)是把一个字符指针转换成了整型数指针,以便
PLongInt(rpack.Buf)^
取得那四个字节表示的整型数(长度)。你调试时看见了pchar的数值是"<"之类的怪字符是因为rpack.Buf的类型是pchar,Delphi的调试器自然把它看成了字符指针,缓冲区里面含有各种各样的字节值,如"<"的ASCII值60,然后按字符的方式显示了出来。pchar是一个比较通用的表示缓冲区的中间类型,就象在早期的C程序中多用char *来表示内存一样(malloc返回char *类型),但实际上这片内存是有结构的(比如说,前四个字节表示长度,而后是缓冲区的内容,其长度由头四个字节决定)。另外,你是在编socket程序,socket库是用C来实现的,而其缓冲区就是用char *来表示,在C中,以字符指针指向的缓冲区并无什么标志来表示其结束的地方(如果是字符串,可以以'\0'结尾,但一般的数据缓冲区内容可能包含了这个数,所以无法以它来作为结尾),因此需要一个长度值来指示,并保证不会存取越界。说得比较罗索,呵呵。