在delphi中获取字符串字节长度

时间:2015-03-31 08:53:12

标签: delphi

我想找到字符串字节长度。首先转换为byte然后获取长度,以便我如何获得字符串字节长度?

var
  val : String;
begin
  val:= 'example';
  ShowMessage(IntToStr(Length(val) * ???)); -> BYTE LENGTH
end;

2 个答案:

答案 0 :(得分:5)

您可以使用SysUtils.ByteLength()功能:

uses
  SysUtils;

var
  val : String;
begin
  val:= 'example';
  ShowMessage(IntToStr(ByteLength(val)));
end;

只知道ByteLength()只接受UnicodeString作为输入,因此传递给它的任何字符串,无论是(Ansi|Wide|UTF8|RawByte|Unicode)String,都将转换为UTF-16(如果还没有)然后它将返回UTF-16中的字节数,只需Length(val) * SizeOf(WideChar)

如果你想在另一个字符集中使用UnicodeString的字节长度,你可以使用SysUtils.TEncoding类:

var
  val : String;
begin
  val := 'example';
  ShowMessage(IntToStr(TEncoding.UTF8.GetByteCount(val)));
end;

var
  val : String;
  enc : TEncoding;
begin
  val := 'example';
  enc := TEncoding.GetEncoding(...); // codepage number or charset name
  try
    ShowMessage(IntToStr(enc.GetByteCount(val)));
  finally
    enc.Free;
  end;
end;

或者,您可以使用AnsiString(N)类型将UnicodeString转换为特定代码页,然后使用Length()获取其字节长度,而不管N实际是什么:

type
  Latin1String = type AnsiString(28591); // can be any codepage supported by the OS...
var
  val : String;
  val2: Latin1String;
begin
  val := 'example';
  val2 := Latin1String(val);
  ShowMessage(IntToStr(Length(val2)));
end;

答案 1 :(得分:2)

var
  val : String;
begin
  val:= 'example';
  ShowMessage(IntToStr(Length(val) * SizeOf(Char)));
end;

或使用ByteLength以字节为单位获取字符串的大小。 ByteLength通过将该字符串中的字符数乘以字符大小来计算字符串的大小。