プロが教えるわが家の防犯対策術!

以下のプログラムで接続先からバイナリデータを取得しているのですが
coutで出力しても画面に何も表示されません。

------------------------------------------------------
/*include部分は省きます*/
std::string bin; //1

clx::http session(clx::uri::encode(ip), 80); //2
session.get(clx::uri::encode(param)); //3

bin = session.body(); //4
std::cout << bin << std::endl; //5

------------------------------------------------------
上記プログラムを空ファイルにリダイレクトしバイナリエディタで見たら
ちゃんとデータは書き込まれていました。

5行目を以下のように変えても空欄が出力されただけで文字は表示されませんでした
std::cout << std::hex << bin << std::endl;

しかし以下のようにすると文字数は表示されました。
std::cout << bin.length() << std::endl;

やりたいこととしてはphpのpack()、unpack()的な部分です。
例えば

値をフォーマットを指定してバイナリデータとして出力
$val=pack("L", 35);

とか

バイナリデータを変数から指定バイト分取り出して10進数で画面に出力
$bin=(バイナリデータ);
$val=unpack("c",$bin);
echo(sprintf("%d",$val));

です。
バイナリの扱いはリトルエンディアンです。

ご教示お願いしますm(__)m

A 回答 (2件)

#include <iostream>


#include <iomanip>
#include <string>
#include <algorithm>

using namespace std;

int main() {
const char raw[] = { 0x6a, 0x54, 0x5, 0x7a };
string bin(raw,4);

cout.fill('0');
for_each( bin.begin(), bin.end(),
[](char ch) { cout << hex << setw(2) << ((int)ch & 0xff) << ' '; });
cout << endl;
}
/* 実行結果
6a 54 05 7a
*/
    • good
    • 0
この回答へのお礼

お礼が大変遅くなりました。
教えていただいたとおりに試したところ期待通りの処理が書けました。
具体例を記載していただき大変助かりました。
本当にありがとうございました。

お礼日時:2013/03/28 00:55

リダイレクトしたファイルの内容を表示したらちゃんと見えるの?

この回答への補足

はい、リダイレクト後のファイルは内容を表示するとちゃんと見えました。

補足日時:2013/02/15 01:29
    • good
    • 0

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