简单指针问题,快来拿分吧!(100分)

  • 主题发起人 主题发起人 xingxing3
  • 开始时间 开始时间
X

xingxing3

Unregistered / Unconfirmed
GUEST, unregistred user!

定义了一个指向BYTE的指针,用来存放诸如ip地址之类数字串,
如何将这一串数字转换成string类型?(50分)

type
Num = record
day: BYTE;
end;

pNum:^Num;
var
p: pNum;

比如有一串Num结构的变量,能否用p := p+1来访问当前变量的下一个变量?(50分
 
先转成pchar
 
首先, 你的type定义是不必要的,而且按照这个定义的话,p+1是不能用的。

其实直接用pchar不好么? 最多赋值的时候p^=chr(number)就是了。
可以直接p+1, string(p)等操作,方便实用。

^BYTE如果是象IP地址这类的,就只能自己转了。用for循环。
 
2.似乎不行,不象c.
 
我只是举个例子,那个结构是人家定好的,我要把里面的信息转换出来,
可是我对delphi里的指针又不太明白。主要不明白pascal的指针可以做加1
之类的操作吗?自定义的结构能+1操作吗?看help里好象可以,不过自己
试试又编译不过去。:(
我再试试。通了就给分了。。
 
指针可以做加一操作,和 c 中一样,都是移动一个指针所指的类型的大小
如 integer 就是 4 个字节。
 
类型 PByte=^Byte

2个变量:

p1:PByte
p2:^Byte

本来p1、p2是一样的东西,都是指向byte数据的指针
但是p1是能加1的,p2 是不能加1的
 
强制转换成整型就应该可以加1了吧
 
指针的访问最好用inc
 
(1).指针可分为两大类:
①Delphi内建的指针类型,如:Pointer,Pchar,PWideChar...
②^Type类型,又分两种:
System和SysUtils单元声明的标准指针类型,如:PAnsiString,PByteArray,PCurrency,POleVariant,PTextBuf...
用户自定义的指针类型:Type pname=^type;
▲PChar是唯一能直接“+/-integer”的指针;其它指针(Pointer除外)要用
Inc/Dec标准过程操作,增减的单位与指针所指的类型一致。使用Inc/Dec操作指
针(包括Pchar)比较安全。

(2).给出一个转换例程:
type
Num = record
day: BYTE;
end;
pNum = ^Num;
const NUM_COUNT=12;
var
p :pNum;
IPArray :array[0..NUM_COUNT] of Char;
IPString :string;
num :integer;

begin
...
for num:=0 to NUM_COUNT-1 do
begin
IPArray[num]:=Chr(p^.day+Byte('0'));
Inc(p);
end;
IPArray[NUM_COUNT]:=Chr(0);
IPString:=IPArray;
...
end;
 
PASCAL和C不一样,PASCAL的P+1指的是p向后的一个字节,所以如果相访问其下个地址则可用下
面代码:
p:=Pointer(integer(p)+sizeof(TMyRecord));
 
谢谢大家!
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部