gpt4 book ai didi

string - 如何将字符串转换为字节数组并返回

转载 作者:行者123 更新时间:2023-12-03 14:37:20 25 4
gpt4 key购买 nike

4我必须将字符串写入二进制 MIDI 文件。该标准要求人们知道字符串的长度(以字节为单位)。因为我也想为移动设备编写代码,所以我不能使用 AnsiString,这是确保字符串是单字节字符串的好方法。这简化了事情。我测试了以下代码:

TByte = array of Byte;

function TForm3.convertSB (arg: string): TByte;
var
i: Int32;
begin
Label1.Text := (SizeOf (Char));
for i := Low (arg) to High (arg) do
begin
label1.Text := label1.Text + ' ' + IntToStr (Ord (arg [i]));
end;
end; // convert SB //

convertSB ('MThd');

它在 Windows 和 Android 中返回 2 77 84 104 100(作为标签文本)。这是否意味着 Delphi 默认将字符串视为 UTF-8?这将大大简化事情,但我在帮助中找不到它。将其转换为字节数组的最佳方法是什么?读取每个字符并测试它是1、2还是4字节并在数组中分配这个空间?要转换回字符:只需读取字节数组,直到遇到字节 < 128?

最佳答案

Delphi 字符串在内部编码为 UTF-16。 SizeOf(Char) 为 2 是一个重要线索。

所有字符在 ASCII 范围内都有序号的原因是 UTF-16 扩展了 ASCII,即 ASCII 范围内的字符 0 到 127 在 UTF-16 中具有相同的序号值。并且你的所有字符都是 ASCII 字符。

也就是说,您无需担心内部存储。您只需使用 TEncoding 在字符串和字节数组之间进行转换。类(class)。例如,要转换为 UTF-8,您可以编写:

bytes := TEncoding.UTF8.GetBytes(str);

相反的方向:

str := TEncoding.UTF8.GetString(bytes);

该类支持许多其他编码,如 documentation 中所述。 。从问题中尚不清楚您需要使用哪种编码。希望您能从这里解决剩下的问题。

关于string - 如何将字符串转换为字节数组并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com