dポイントプレゼントキャンペーン実施中!

Base64でエンコードした後の文字列が思った通りになりません。


C言語とPHPの双方で、
ファイルをBase64でエンコード・デコードしたいと考えています。
PHPにはbase64_encode関数がありますのでこれを利用しますが、
C言語には無いようなので関数を自作することにしました。


以下を参考に、fopen関数を使用して画像をバイナリ形式で読み込み、
エンコードすると以下の文字列が出力されました。
http://www.dokidoki.ne.jp/home2/usui/itmemo/020. …
/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgABgAHAwERAAIRAQMRAf/EAFMAAQAAAAAAAAAAAAAAAAAAAAYBAQAAAAAAAAAAAAAAAAAAAAAQAAIDAAIDAAAAAAAAAAAAAAIEAQMFFAYAEhMRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AGiejln2xpJzNeq6DVyCwNJWNrnWafxQlgaSoaNuXJI3IYgVgtH0YkjIic8D/9k=


しかし、PHPのbase64_encode関数で同様の画像をエンコードすると、
以下の文字列が出力されました。
<?php
 $data = base64_encode("\xFF\xD9\xFF\xD8".file_get_contents('sample.jpg'));
 echo $data;
?>
/9n/2P/Y/+AAEEpGSUYAAQIAAGQAZAAA/+wAEUR1Y2t5AAEABAAAADwAAP/uAA5BZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH//AABEIAAYABwMBEQACEQEDEQH/xABTAAEAAAAAAAAAAAAAAAAAAAAGAQEAAAAAAAAAAAAAAAAAAAAAEAACAwACAwAAAAAAAAAAAAACBAEDBRQGABITEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwBono5Z9saSczXqug1cgsDSVja51mn8UJYGkqGjblySNyGIFYLR9GJIyInPA//Z


どう見ても双方の結果が異なってしまうのですが、原因がわかりません・・・。
何か形式が異なるのでしょうか?
もし原因がお分かりになる方がいらっしゃれば、教えていただければ助かります。
よろしくお願いします。

A 回答 (1件)

PHPはあまり知らないですが


"\xFF\xD9\xFF\xD8".file_get_contents('sample.jpg')
これだと、ファイルの前に"\xFF\xD9\xFF\xD8"の4Byteが付加されて、BASE64変換されてしまうように思うのですが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
仰るとおりでした・・・!
そのままコピーしてきたものを使用していたために、
そしてC言語の方ばかりを見ていたために気づかなかったです(汗)
ご指摘いただいた文字列を取り除いたところ、一致しました。
ありがとうございました。

お礼日時:2010/08/19 19:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!