该使何种类型的字符串?(100分)

  • 主题发起人 主题发起人 heimukai
  • 开始时间 开始时间
H

heimukai

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序需要通过流的形式传递一些数据给其他接收程序,接收放可能是C写的。现对于字符的使用上面有一些疑问请教大家。
比如我要传递的数据第一、二个字节传的都一个32位无符号整数,第三个到第十二个字节传递的是一个十字节长度的字符串。无符号整数我使用的Cardinal类型,字符串我定义成了String[9](因为DELPHI里面String[9]需要占用10个字节的长度,头一个字节存储的是标识这个字符串真正长度的一个整数),则表现成二进制流就是这样(这里面存储了值为16和17的两个整数和字符串"HHHHHH"):
10 00 00 00 11 00 00 00 06 48 48 48 48 48 48 00 00 00
这样的话我有两个疑问了:
1。那么String[9]只能传递9个字节的字符串,如果我确实需要10个字节长度而定义成String[10]的话,那岂不是占用了11个字节长?而如果后面还用别的数据,这样对于别的语言来解析这个流的时候应该会出现错乱吧?
2。是否所有语言在将字符串写到流里面的时候都会将第一位用来标识实际的长度?
3。如果不是则我改用什么类型的字符串?PCHAR吗?我发现PCHAR总是占用4个字节的长度,而我的要求是不管实际字符串有多长都要占用10个字节,长度不够的就用结束符补全。
 
那你脆用最古老的方法,字符数组,CHAR(10),就OK了!!
 
PCHAR 是 一个开始。一段字节的开始。

var
temp: Pchar;
begin
getmem(temp, 1024);
fillchar(Temp, 1024, 0);

freemem(temp, 1024);

end;





 
对!你的这种想法只好使用字符数组了。
 
对,用char
 
主要还是组织的问题吧.使用什么形式来写都一样,只要能够实现.语言都是相通的.
 
sss174016,EdwinYeah,如果是用CHAR的话,那么我有一个问题,比如我定义:
var
TranStr : array[0..9] of char;
S : String ;
则:
TranStr := S;
这样的操作的时候会出现类型不匹配的错误,无法编译。
 
使用move方法

var
TranStr : array[0..9] of char;
S : String ;
i: integer;
begin
// TranStr := S;
S := '1234567890';
Move(S[1],TranStr,Length(TranStr));
for i := 0 to 9 do
caption := caption + ' ' +TranStr;
end;
 
多人接受答案了。
 
后退
顶部