저는 독자적인 ID3v2 태그 리더를 작성하고 있지만 APIC 태그에 문제가있는 것 같습니다. 읽었을 때마다 실제로는 511,281 바이트가 크면 2,038,335 바이트가됩니다. 나는 이유에 아무 생각이없고, 나는이 줄을 함께 할 수있는 뭔가의 느낌이 있습니다ID3v2 C#에서 APIC와 태그 문제가 발생했습니다./
int size = (data[ i ] << 24) | (data[ ++i ] << 16) | (data[ ++i ] << 8) | (data[ ++i ] << 0) - 1;
을하지만,이 라인은 내가 대해 테스트 한 다른 모든 태그에 적용됩니다. ID3v2 태그 표준이나 뭔가 완전히 다른 것을 잃어 버릴 수도 있습니다.
이List<byte> temp = new List<byte>();
for(int i = 1; i < frame.Length; i++) {
if(frame[i] == 0x00) {
break;
} else {
temp.Add(frame[ i ]);
}
}
string strVer = Encoding.Default.GetString(temp.ToArray());
if (strVer.StartsWith("image/")) {
List<byte> image = new List<byte>();
for(int i = temp.Count + 1 + frame[ temp.Count + 2 ]; i < frame.Length; i++) {
image.Add(frame[ i ]);
}
tagInfo[ tag ] = image.ToArray();
}
tagInfo[ tag ] = frame;
내가 테스트를 위해 사용하고 파일은 2000x2000 픽셀 이미지와 '에어로 코드에 의해 대한 저항 "입니다 : 여기에 나중에 이미지를 저장하기위한 것입니다 코드의 조각이다. 예상
using System;
using System.IO;
using System.Text;
using System.Threading;
class Program {
static void Main(string[] args) {
int tagSize = 0;
byte[] fileData = byte[] fileData = { 0x41, 0x50, 0x49, 0x43, 0x00, 0x1f, 0x1a, 0x3f };
for (int i = 0; i < fileData.Length - 3; i++) {
string tag = Encoding.Default.GetString(new byte[] { fileData[ i ], fileData[ i + 1 ], fileData[ i + 2 ], fileData[ i + 3 ] });
if (tag.Equals("APIC")) {
i += 4;
tagSize = (fileData[ i ] << 24) | (fileData[ ++i ] << 16) | (fileData[ ++i ] << 8) | (fileData[ ++i ] << 0) - 1;
break;
}
}
Console.Write($"Tag stated size: {tagSize} bytes.");
Thread.Sleep(60000);
}
}
: 2,038,334 바이트
파일과 APIC 태그에서에 포함 된 이미지를 사용 : 결과가
511,281 바이트 여기
는 같은 크기를 생성하는 스크립트입니다 파일. standard 가입일
스택 오버플로에 오신 것을 환영합니다. [둘러보기]와 [질문]을 읽으십시오. 질문에 문제를 재현하는 데 필요한 모든 코드와 입력이 있어야합니다 (예 : [mcve]). – CodeCaster
@CodeCaster 제 편집이 더 좋습니까? 나는이 사이트에 대해 묻는 것에 익숙하지 않으며 나는 인간 상호 작용에 그다지 좋지 않습니다. – TechNGamer
네, 그게 더 낫지 만 문제가 그 줄에 있다고 생각한다면 입력, 예상 출력 및 실제 출력을 포함하여 문제를 재현하는 [mcve] (Visual Studio 또는 ideoneor dotnetfiddle에서 새 프로젝트 시작)를 보여주십시오. . – CodeCaster