まあ、当たり前のことなんですけどね。 前回の記事のプログラムを書き直した 前回の記事のMJPEGからJPEGを切り出すプログラムにはバグがありました。脚注にも書きましたが、それは読み込んだバッファの最後のバイトが0xffで、次のバッファの先頭が0xd9のときに、JPEGの終わりを見逃してしまうというものです。 なので、ちゃんと4つの状態を遷移するように書き直しました。 const std = @import("std"); const fs = std.fs; const io = std.io; const os = std.os; const BUF_SIZE = 64 * 1024; const OUTPUT_FILENAME_PATTERN = "out{d:0>4}.jpg"; const JPEG_START0 = 0xff; const JPEG_START1 = 0xd8;
![Zigで配列をなめるときにはできるだけwhileでなくてforを使いましょうという話](https://cdn-ak-scissors.b.st-hatena.com/image/square/559a8e4ff7da710a307c200818297034c519a3a3/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--QEMqgY0_--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AZig%2525E3%252581%2525A7%2525E9%252585%25258D%2525E5%252588%252597%2525E3%252582%252592%2525E3%252581%2525AA%2525E3%252582%252581%2525E3%252582%25258B%2525E3%252581%2525A8%2525E3%252581%25258D%2525E3%252581%2525AB%2525E3%252581%2525AF%2525E3%252581%2525A7%2525E3%252581%25258D%2525E3%252582%25258B%2525E3%252581%2525A0%2525E3%252581%252591while%2525E3%252581%2525A7%2525E3%252581%2525AA%2525E3%252581%25258F%2525E3%252581%2525A6for%2525E3%252582%252592%2525E4%2525BD%2525BF%2525E3%252581%252584%2525E3%252581%2525BE%2525E3%252581%252597%2525E3%252582%252587%2525E3%252581%252586%2525E3%252581%2525A8%2525E3%252581%252584%2525E3%252581%252586%2525E8%2525A9%2525B1%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Atetsu_koba%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzI2OGM5OTNhODkuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png)