4I必须将字符串写入二进制MIDI文件。该标准要求用户知道字节的长度。由于我想写手机以及我不能使用AnsiString,这是确保字符串是一个字节的字符串的好方法。这简化了事情。在Windows以及Android的如何将字符串转换为字节数组并返回
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');
它返回2 77 84 104 100(如标签文本):我测试下面的代码。这是否意味着Delphi默认将字符串视为UTF-8?这将大大简化事情,但我无法在帮助中找到它。什么是将其转换为字节数组的最佳方式?读取每个字符并测试它是1,2或4个字节并在数组中分配此空间?要转换回字符:只需读取字节数组,直到遇到一个字节< 128?
@Tlama - 这是故意的:-)当编写一个MIDI文件时,我可以组织这种情况。我想知道Delphi在使用UTF-8字符时做了什么,它会自动将它改为两个字节的表示吗?它并没有和有趣的一样 - 它对Windows和Android一贯如此。 – Arnold
实际上,你在代码中的字符确实是两个字节宽。这就是SizeOf告诉你的。 –