HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0723
にゃんちゃんb64decodeについて3解決


にゃんちゃん

リンク

2015/7/23(Thu) 13:53:33|NO.70206

こんにちは。
base64エンコード済みの文字列からb64decodeでバイナリファイルを生成し、それをbsaveで保存しようとしています。現在、ちょっとした問題が発生していて、解決方法を探しています。
まず、b64decode事態に、出力先変数の自動拡張機能がないようでした。これではしょうがないので、デコードする前の文字列と同じバイト数のメモリを確保しておきました。
こうすると、デコードは正常に完了するのですが、base64の仕様上、必ず後ろのほうに余計なスペースができてしまいます。
バイナリでなければ、保存するときにstrlenを使えばいい話なのですが、デコードしたバイナリの途中に終わり端コードがあるようで、それをすると保存が途中で止まってしまいます。
返還後のバイト数が帰ってきてないかと思って、命令実行後のstatとstrsizeも確認しましたが、strsizeに帰ってきたのがデコード前のバイト数だったので、これも使えませんでした。
デコードした部分だけをきれいに保存する方法はなにかないでしょうか?
よろしくお願いします。



この記事に返信する


にゃんちゃん

リンク

2015/7/23(Thu) 14:17:50|NO.70207

イノビアさんのマシン語版モジュールを使ったら解決しました。
解決したのですが、気になるので引き続き質問させてください。
hspinet版のデコード命令のように、デコード後のサイズを返してくれない場合、中身のバイナリファイルの本当の終わり端を見つける方法はなにかあるのでしょうか?バイナリのフォーマットについては、「00が途中にあったらそこから先は読んでくれない」ぐらいしか知識がないので、興味があります。



Flat

リンク

2015/7/23(Thu) 15:34:42|NO.70208

バイナリのサイズに関してはないはずです。(確保した大きさならば取得できないでもですが。)

Base64のデコード前文字列からデコード後のサイズを算出するには、
(=を除いた文字長) * 3 / 4 で求められます。
(正確には異なりますが小数点以下を切り捨ててしまえば同じ値になるのでこう書きました。)


…binary型とかあればなあ



にゃんちゃん

リンク

2015/7/23(Thu) 17:41:18|NO.70209

あぁ、base64の生成アルゴリズムから逆算して、デコードしたら何バイトになるか求めるみたいな感じですね。勉強になりました。
解決にします。ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.