首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

StrCopy遇#0就结束,怎么复制WideChar字符

2012-03-29 
StrCopy遇#0就结束,如何复制WideChar字符?varszRecv: Array[0..1023] of CharrecvLen: IntegerDomain, N

StrCopy遇#0就结束,如何复制WideChar字符?
var
  szRecv: Array[0..1023] of Char;
  recvLen: Integer;
  Domain, Name, ABC: Array[0..255] of Char;
begin
  recvLen := Recv(Sock, szRecv, SizeOf(szRecv), 0);
  if recvLen < 10 then
  begin
  //szRecv数组里面包含两个以上的WideChar(Unicode)字符
  StrCopy(Domain, @szRecv[0]); //用StrCopy遇#0就结束了,Domain内容是"WORKGROUP" 只获取"W"

  end;
end;

szRecv数组内容大概如下:

JScript code
57 00 4F 00 52 00 4B 00 47 00 52 00 4F 00 55 00 50 00 00 00 46 00 55 00 43 00 4B 00 00 00 65 00 66 00 67 00 00W     O     R     K     G     R     O     U     P               F     U     C     K                A     B     C  

   

获取后可以通过转换实现,这里我只举例数组里包含三个WideChar字符,但在未知多少个WideChar的前提下,这样太麻烦,有没有类似WideChar版的StrCopy遇到双#0就截断.这样偏移一下就可以循环获取了.
求解!



[解决办法]
直接用system.move行不行?
[解决办法]
不知道长度就全move了,现在都在为32位系统如何使用8g内存发愁,而你却为几个字节发愁。

去看下SysUtils单元,Delphi为了实现管理PChar类型长度,在PChar地址的前面申请了一个字节,表明长度。
function StrBufSize(const Str: PChar): Cardinal;
var
P: PChar;
begin
P := Str;
Dec(P, SizeOf(Cardinal));
Result := Cardinal(Pointer(P)^) - SizeOf(Cardinal);
end;

function StrAlloc(Size: Cardinal): PChar;
begin
Inc(Size, SizeOf(Cardinal));
GetMem(Result, Size);
Cardinal(Pointer(Result)^) := Size;
Inc(Result, SizeOf(Cardinal));
end;
[解决办法]
recvLen就是收到的长度了,直接用move吧
[解决办法]
CopyMemory

热点排行