delphi中怎样建byte数组转换成string型

smiledesky1 2017-05-28 09:22:33
buf :array of byte ;(这个数组中已经有值了,只有数字,无汉字)
str :string;
我用move(buf[0],str[1],sizeof(buf)) 这种方法写,加日志取出来的是乱码,是我写的有问题么?请问还有其他方法吗?

function TForm1.SendAndRecvByte(myRequest: array of Byte;
var myResponse: array of Byte): Integer;
var
Data, Data1, Info, Str, RecvData: string;
BufRecv: pchar;
BufSend, kk: pchar;
Recvkey, Sendkey: pchar;
Re: Integer;
tmp, tmp1: string;
len_send, len_recv: integer;
KEY: string;
m_EncryStr, m_str: string;
m_EncryLen, m_Len: Integer;
nNetTimeout: Integer;
MAX_PACK: Integer;
i: Integer;
mMoney: Double;
status: Integer;
aa: array of Byte;
begin
SendToExeLog('储值卡发送数据vByte...');
try
SendToExeLog('储值卡发送数据vByte...1');
RecvData := '';
MAX_PACK := 11264;
GetMem(BufSend, 1024);
ZeroMemory(BufSend, 1024);
GetMem(BufRecv, MAX_PACK);
ZeroMemory(BufRecv, MAX_PACK);

//----------byte[] 转换成 string -----------

// SetLength(Data, SizeOf(myRequest));
Move(myRequest, Data[1], SizeOf(myRequest));

//--------------------------------------
ShowMessage('发送数据vByte:' + Data);
Info := Data;
m_Len := Length(Info); //未加密长度
strpcopy(BufSend, Data);
Re := send(socket1, BufSend^, m_Len, 0); //发送 数据
if (Re = SOCKET_ERROR) then
begin
SendToExeLog('储值卡发送数据vByte...2');
result := -1;
end;
//接收数据
nNetTimeout := 1000 * 30;
setsockopt(socket1, SOL_SOCKET, SO_RCVTIMEO, @nNetTimeout, sizeof(nNetTimeout));
//发送时限
// setsockopt(socket1,SOL_SOCKET,SO_SNDTIMEO,Pchar(@nNetTimeout),sizeof(nNetTimeout));
// //接收时限
// setsockopt(socket1,SOL_SOCKET,SO_RCVTIMEO,Pchar(@nNetTimeout),sizeof(nNetTimeout));
// //连接主机
// ZeroMemory(@SocketAddr,sizeof(SocketAddr));
ZeroMemory(BufRecv, MAX_PACK);
Sleep(10);
ShowMessage('接收数据vByte 00000000:' + BufRecv);
re := recv(socket1, BufRecv^, 1024, 0); //接收数据
ShowMessage('接收数据vByte 11111111:' + BufRecv);
//tmp := BufRecv;
tmp := StringReplace(BufRecv, #$A#$A, EmptyStr, [rfReplaceAll]);
if tmp = '' then
begin
SendToExeLog('储值卡发送数据vByte...3');
result := -1;
exit;
end;
SendToExeLog('储值卡接收数据vByte... tmp:=' + tmp);
ShowMessage('接收数据vByte:' + tmp);

//------------指针转数组 ------------------------
FillChar(myResponse, length(BufRecv), #0); //将长度为BufRecv的 数组myResponse 初始化为空;
Move(BufRecv^, myResponse, SizeOf(myResponse));
SendToExeLog('BufRecv:=' + BufRecv);

finally
SendToExeLog('储值卡发送数据vByte失败...');
FreeMem(BufSend);
FreeMem(BufRecv);
end;
result := 0;
end;
...全文
1771 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nextop88 2017-06-02
  • 打赏
  • 举报
回复
没有汉字,只要一个函数,把所有字节进行转化就行了,CHAR(XX),XX必须是十六进制,后面再拼起来就行.
smiledesky1 2017-05-28
  • 打赏
  • 举报
回复
没有汉字,就是一串数,是4+4+13字节这样存进去的,前两个A := $0401,B:=16 是从低到高存进去的,后面那个是一个卡号C:= 1234567891012 按顺序放到数组里的,但是这些都插完之后,我想看下这个buf数组存入的值对不对,我应该怎么看呐?
belsai 2017-05-28
  • 打赏
  • 举报
回复
Byte只有0..255能表示汉字吗?如果是用来写卡的话,建议将汉字值转换为16进制后再按高低位分别存储,还原的时候取两个转换为16进制合并后再转为汉字

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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