4 이진 MIDI 파일에 문자열을 써야합니다. 표준에서는 바이트의 문자열 길이를 알아야합니다. 모바일 용으로 쓰고 싶기 때문에 AnsiString을 사용할 수 없습니다. 이는 AnsiString이 문자열이 1 바이트 문자열인지 확인하는 좋은 방법이었습니다. 그것은 단순화 된 것입니다. 다음 코드를 테스트했습니다.문자열을 바이트 배열로 변환하는 방법
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 (레이블 텍스트로)을 반환합니다. 델파이가 기본적으로 문자열을 UTF-8로 취급한다는 의미입니까? 이것은 크게 단순화 할 것이지만 도움으로 찾을 수는 없습니다. 그리고 이것을 바이트 배열로 변환하는 가장 좋은 방법은 무엇입니까? 각 문자를 읽고 1, 2 또는 4 바이트인지 테스트하고 배열에서이 공간을 할당합니까? 다시 캐릭터로 변환하려면 : 바이트가 만날 때까지 바이트 배열을 읽는다. < 128?
@Tlama - 그건 의도적으로 :-) MIDI 파일을 작성할 때 필자는 그런 식으로 정리할 수 있습니다. 필자는 델파이가 UTF-8 문자를 사용할 때 어떤 작업을하는지 궁금해했습니다. 자동으로 2 바이트 표현으로 바꿀까요? 그것은, 그리고 매우 흥미롭지는 않지만, Windows와 Android에서 그렇게 일관되게 적용됩니다. – Arnold
실제로 질문에있는 코드의 문자는 실제로 2 바이트입니다. 그것이 SizeOf에 대한 호출이 여러분에게 말한 것입니다. –