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个字节,长度不够的就用结束符补全。
比如我要传递的数据第一、二个字节传的都一个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个字节,长度不够的就用结束符补全。