我想使用Alex Beregszaszi編寫的cws2fws工具將壓縮的swf文件轉換爲未壓縮的swf文件,該工具是轉換例程的ffmpeg集合的一部分。我使用的壓縮文件是有效的文件,因爲它們可以通過Firefox和其他程序打開和播放,但是當我通過cws2fws運行它們時,程序會給出錯誤(-5),指示文件已損壞。我已下載該程序的源代碼並使用Visual Studio進行編譯。當我通過新編譯的程序運行我的文件時,我得到的結果與從Web下載的程序相同。在調試程序時,我注意到用於確定swf的未壓縮文件大小的四個字節中的兩個是負數(參見下面的第64行)。使用cws2fws轉換壓縮的swf的問題
00056 if (buf_in[0] != 'C' || buf_in[1] != 'W' || buf_in[2] != 'S')
00057 {
00058 printf("Not a compressed flash file\n");
00059 exit(1);
00060 }
00061
00062 fstat(fd_in, &statbuf);
00063 comp_len = statbuf.st_size;
00064 uncomp_len = buf_in[4] | (buf_in[5] << 8) | (buf_in[6] << 16) | (buf_in[7] << 24);
00065
00066 printf("Compressed size: %d Uncompressed size: %d\n", comp_len-4, uncomp_len-4);
所以,我的問題是:
1)我感覺有點密集,所以可能有人請解釋確定從4個字節的文件大小的邏輯如圖線路64我明白該大小可能是2至2^32的一系列冪的增加,但是如何使用位運算符來獲取正確的數字?
2)buf_in [5]和buf_in [6]都是負數,這可能是操作系統之間的問題,因爲我在Windows機器上,而且這個代碼顯然是在* nix機器上開發的。對我來說,這表示程序中的一個錯誤,它與已簽名和未簽名的整數有關。我是否正確,我該如何繼續?
3)這段代碼可能無法處理較新的swf文件嗎?
4)有沒有人最近使用過這個程序成功了?
感謝您提前幫忙。
Err,s/offset 3/offset 4 /當然。 – ephemient 2009-10-16 16:01:13