Bläddra i källkod

rtl: add WideBytesOf(UnicodeString): TBytes for delphi compatibility

git-svn-id: trunk@19391 -
paul 14 år sedan
förälder
incheckning
14c2f248df

+ 9 - 0
rtl/objpas/sysutils/sysuni.inc

@@ -179,3 +179,12 @@ begin
   Result:=TEncoding.Default.GetBytes(Val);
 end;
 {$ENDIF VER2_4}
+function WideBytesOf(const Value: UnicodeString): TBytes;
+var
+  Len:Integer;
+begin
+  Len:=Length(Value)*SizeOf(UnicodeChar);
+  SetLength(Result,Len);
+  if Len>0 then
+    Move(Value[1],Result[0],Len);
+end;

+ 1 - 0
rtl/objpas/sysutils/sysunih.inc

@@ -45,3 +45,4 @@ function StrPCopy(Dest: PWideChar; const Source: UnicodeString): PWideChar; over
 function BytesOf(const Val: UnicodeString): TBytes; overload;
 function BytesOf(const Val: WideChar): TBytes; overload;
 {$ENDIF VER2_4}
+function WideBytesOf(const Value: UnicodeString): TBytes;

+ 15 - 0
tests/test/units/sysutils/tbytesof.pp

@@ -17,6 +17,18 @@ begin
       Result := Result and (B[I] = Etalon[I]);
 end;
 
+function CheckWideBytes(const B: TBytes): Boolean;
+const
+  Etalon: array[0..7] of Byte = (84, 00, 101, 00, 115, 00, 116, 00);
+var
+  I: Integer;
+begin
+  Result := Length(B) <= Length(Etalon);
+  if Result then
+    for I := Low(B) to High(B) do
+      Result := Result and (B[I] = Etalon[I]);
+end;
+
 var
   S: AnsiString;
   U: UnicodeString;
@@ -36,4 +48,7 @@ begin
   B := BytesOf(U[1]);
   if not CheckBytes(B) then
     halt(4);
+  B := WideBytesOf(U);
+  if not CheckWideBytes(B) then
+    halt(5);
 end.