Нужна помощь эксперта zLIB для функции VB.NET

Нужно знать, трачу ли я свое время на это. Использование UltraID3lib, который не распаковывает кадры, а сохраняет их в массиве, используя функцию исключения. Используемые флаги говорят, что они сжаты, но не зашифрованы.

Если байты действительно сжаты в zLIB и имеют правильный формат: как я могу распаковать их, учитывая тот факт, что я абсолютно ничего не знаю о zLIB, и я всего лишь частично занятый кодер, которого бросили ему на голову, как ребенка. (Пожалуйста, объясните медленно).

Пользовательский кадр MP3 (TXXX) содержит небольшую строку XML. Быстрый (плохой пример) для получения байтового массива, хранимого UltraID3Lib:

UltraID3.Read(MP3FileName) 'actual file in folder

Dim byte1 As ID3v23EncryptedCompressedFrame
For Each byte1 In UltraID3.ID3v2Tag.Frames
    Dim str1 = byte1.FrameBytes
    Dim result1 = BytesToString2(str1)
    Stop 'lets see what we got
Next

На этом сайте говорится, что если в начале у него 789C, то его сжатый zLib: http://www.xtremevbtalk.com/showthread.php?t=318843

Я использовал эти функции2 для преобразования в шестнадцатеричный формат: https://social.msdn.microsoft.com/Forums/vstudio/en-US/fa53ce74-fd53-4d2a-bc05-619fb9d32481/convert-byte-array-to-hex-string?forum=vbgeneral

Пример функции 1 в начале статьи:

000B0789C6330377433D63534D575F3F737B570343767B02929CA2C4B2D4BCD2B29B6B31D376367989B9A976C519F9E5ACE1989452536FA6019B924C206968017A10CA461F2C6AA3FD58A61427E5E72AA42228A114666E6F88CD04772110D5923799

Пример функции 2 в конце статьи:

000000B0789C6330377433D63534D575F3F737B570343767B02929CA2C4B2D4BCD2B29B6B301D376367989B9A976C519F9E50ACE1989452536FA60019B924C20696800017A10CA461F2C6AA30FD58A61427E5E72AA42228A114666E6F88CD047721100D5923799

1 ответ

Решение

Ваша "примерная функция 2" является шестнадцатеричным представлением действительного потока zlib, начиная с 789c, который распаковывает в:

71F3-15-FOO58A77<trivevents><event><name>show Chart</name><time>10000000.000000</time></event><event><name>show once a</name><time>26700000.000000</time></event></trivevents>

Однако "примерная функция 1" является искаженной версией "примерной функции 2", по некоторым причинам с несколькими пропущенными нулевыми цифрами.

Вы можете использовать.NET DeflateStream класс для распаковки.

Другие вопросы по тегам