再次提问关于PByte 转换为 string(50分)

  • 主题发起人 主题发起人 blackdove
  • 开始时间 开始时间
B

blackdove

Unregistered / Unconfirmed
GUEST, unregistred user!
对不起,你只告诉了我怎样从PChar转换成string,没有告诉我怎样从PByte转换成string型。另,请不要只告诉我一个函数,请告诉我一种关于类型转换的一些方法。谢谢。
 
var<br>&nbsp; a:pbyte;<br>&nbsp; b:string;<br>begin<br>&nbsp; getmem(a,sizeof(pbyte));<br>&nbsp; a^:=$12;<br>&nbsp; b:=inttostr(a^);<br>&nbsp; Showmessage(b);<br>end;
 
嘿嘿,<br>不错,<br>挺上进的吗;)<br><br>看过《Delphi2程序设计大全》(Charles Calvert著)吗?<br>书里第一部分对字符串及指针进行了深入的分析。<br><br>从Delphi2以后, PChar与string的区别正在减小。<br>通常string是指AnsiString, 即长字符串。它的格式格式如下:<br>&nbsp; ————————————————<br>&nbsp; |引用次数| 长度 | 字符串 |'/0'|<br>&nbsp; ————————————————<br>&nbsp; &nbsp; 4Byte &nbsp; 4Byte <br>PChar就象C中的char *一样了。<br><br>关于PByte,它是指向Byte类型的指针, <br>对于ansi字符串来说一个char 占用一个Byte。<br>如果一个PByte指针指向一个Byte,那么可按hubdog的方法转换就是了。<br>如果指向一组Byte可用PByteArray指针。<br>&nbsp; PByteArray = ^TByteArray;<br>&nbsp; TByteArray = array[0..32767] of Byte;<br>它与字符串指针转换时,也得一个一个转换,注意字节个数。
 
I am a new rich. Jams what means &gt;&gt;
 
其实delphi中类型转换非常灵活的. <br>我对类型的看法可不那么死板. 我是根据字节数来判断. 字节数相同的类型<br>都可随意转换.<br>例如:<br>integer型变量就可以当成 array[0..3] of byte, array [0..3] of char, pointer, ....<br>(甚至single) 来保存数据.<br>pbyte, pchar, pinteger, pbytearray.....这些都是指针(4字节). 完全可以随意<br>使用, 所谓类型转换只是为了让编译器知道如何处理默认情况下具体数据是<br>多少字节. <br>比如pbyte指向的值(p^), 只是告诉编译器这个默认指向的值是个byte. (0-255的整数).<br>pchar, 告诉编译器默认情况下这是个指向#0结尾的一串连续的字符.<br>因此, 如果你知道你的pbyte指向的内存是一个#0结尾的字符串, 则可以<br>直接用strpas( pchar(pointer(ur_pbyte_var)) )转成字符串(string)
 
hubdog: jams的意思是: 请继续. &nbsp;:-)
 
如果你不确定你的pbyte指向的内存块有#0作为结尾, 那么只要知道长度, <br>可以用SetString(DstString, pchar(pointer(ur_pbyte_var)), known_length); <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^强制转换pbyte为pchar<br>把pbyte直接转换成string.<br>如果不知道长度. 那只能转换一个字节了(天知道第二个字节是不是已经处于<br>非法内存访问的区域了).
 
那么依此类推, 用"point类型a(pointer(point类型b))"可以把任何指针类型互相<br>转换.
 
时间太久,强制结束。 &nbsp; &nbsp; wjiachun<br>
 

Similar threads

回复
0
查看
846
不得闲
回复
0
查看
976
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
899
SUNSTONE的Delphi笔记
S
后退
顶部