2016-12-08 15 views
-5

2つの整数が文字列に連結され、その文字列が文字単位で読み込まれ、16進数で出力される場合、これらの数値の16進値は数字自体。C++での文字列から16進値への変換

例:

  • は、私は2つの数字、6、8、文字列 "ヤフー" を考えてみましょう。

  • 最初の手順では、それらを連結して "6yahoo8"という文字列をsnprintf()で取得します。次のステップで

  • 、私は私が最終的な出力を得るためにしたい、その進値から文字や印刷 によって

  • をその文字列の文字を読む:

    {0x06で、0x79、の0x61、0x68 、0x6F、 0x6F、0x08}。

  • しかし、私のプログラムが結果を印刷している:

    {0x36、0x79、の0x61、0x68、0x6F、 0x6F、0x38}。

    この結果は、最初と最後のバイトを除いて正しいです。 私がしたいような仕事をどのように達成するか? アドバイスをいただきありがとうございます。

    プログラム私は、文字列を形成するために使用しています:

    string encode_url() { 
        StringAccum sa; 
        string url; 
        const char *str = "yahoo"; 
        int p = 6; 
        int q = 8; 
        sa.snprintf(1,"%x", p); // snprintf(len, format, value); 
        sa << str.c_str(); 
        sa.snprintf(1, "%x", q); 
        url = string(sa.take_string().c_str()); 
        return url; 
    } 
    

    我々はC++で基本的に文字列のアキュムレータであるStringAccum、同様に使用するいくつかの慣習的な機能があります。

+4

"C/C++"の使用を中止してください。 –

+1

@NickyC私は、同じ番号のより良いバージョンを入れました:P –

+2

数字を文字列に入れるとcharになり、 '6'のASCIIコードは36になります。 – Photon

答えて

0

理由を調べるには、ASCII文字コードを調べる必要があります。

16進数で8を変換すると、0x38が得られます。 6と同様に0x36が得られます。

ここでは8が文字変数ではないので、0x8ではなく0x38を取得しました(intよりも明白ではありませんが、整数の他の型はcharです。別のアプリケーションがあります)。

関連する問題