我想找到字符串字节长度。首先转换为byte然后获取长度,以便我如何获得字符串字节长度?
var
val : String;
begin
val:= 'example';
ShowMessage(IntToStr(Length(val) * ???)); -> BYTE LENGTH
end;
答案 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
通过将该字符串中的字符数乘以字符大小来计算字符串的大小。