求助:delphi7下 按UTF-8编码将字符串转换成byte数组

kobaer 2012-03-07 09:31:52
在发送消息时需将字符串指令按UTF-8编码将字符串转换成byte数组,在该byte数组前附加两个字节(big endian)描述后续字节数。


我和别的公司做TCP对接 我这边是客户端
他文档中有上面一句话

我的理解是 先将 string 转换成 UTF8String 在将 UTF8String 赋值给 byte数组

但是信息是错误的 是不是我理解错误了

我的代码如下

var LoginInfo: string;
temp1: UTF8String;
retuInfo, count: Integer;
pass: MD5Digest;
info: array of Byte;
readarr: array[0..254] of Byte;
begin
//DlSocketProxy.connectServer;

try

pass := MD5String(serverPWD);
temp1 := MD5Print(pass);
//要发送的字符串
LoginInfo := '1,' + serverID + ',' + FormatDateTime('yyyymmddhhmmss', Now) + ',' + temp1;
count := Length(LoginInfo);
//转化成 UTF8String
temp1 := UTF8Encode(LoginInfo);


SetLength(info, count + 2);
//转化成byte数组
Move(temp1[1], info[2], count);
retuInfo := Length(info);
//添加描述字符 第一个字节为0 第二个字节为 数据原始长度
info[0] := 0;
info[1] := retuInfo - 2;
except

end;

end;
...全文
662 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kobaer 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kaikai_kk 的回复:]
叫服务端提供DEMO不就好了,提供这种服务连接的都会有DEMO
[/Quote]
服务商现在很牛 没有任何demo
kaikai_kk 2012-03-07
  • 打赏
  • 举报
回复
叫服务端提供DEMO不就好了,提供这种服务连接的都会有DEMO
kobaer 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 funxu 的回复:]
更正是单字赋汉字和中英文混排
[/Quote]
没有中文
funxu 2012-03-07
  • 打赏
  • 举报
回复
更正是单字赋汉字和中英文混排
funxu 2012-03-07
  • 打赏
  • 举报
回复
按你的代码 info[1] 直接等于count不就行了?
而且这句好像不对吧
Move(temp1[1], info[2], count);
count是ansi字符串的长度而utf8英文数字1字节,其他特殊字符包括汉字等占2~4不等,那么你这种赋值方法肯定会有隐患
而且以前版本的delphi UTF8Encode函数有bug对于单字节中英文混排的转换会出现乱码

kobaer 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tjianliang 的回复:]
理解应该没问题
服务端单位有没有提供DEMO或技术支持,这个最好问一下
附加的两个字节描述符有没有问题?
[/Quote]

我刚才也在考虑是否是后面的 描述字节的问题 我确认一下
我看见佛 2012-03-07
  • 打赏
  • 举报
回复
问下服务器开发公司不就知道了,省得自己瞎猜,费时又费力!若真不是这样,那岂不是浪费时间?
亮剑_ 2012-03-07
  • 打赏
  • 举报
回复
理解应该没问题
服务端单位有没有提供DEMO或技术支持,这个最好问一下
附加的两个字节描述符有没有问题?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧