2017-03-23 5 views
0

符号なし32ビットintをIPアドレスstd :: stringに変換する方法を探しています(itoaまたはto_stringまたはboostなし)。私たちの現在のバージョンはそれらのどちらもサポートしていません。また、これは私たちのシステム上で何度も実行されるので、高速でなければなりません。itoa/to_string/boostなしのIPアドレス文字列への符号なしint

たとえば、符号なし32ビットintの各8ビットセグメントは、intの32ビットすべてが変換されるまで、オクテットの1つに変換されます。 printfを検討していた...良い方法がありますか?

16909060 - > 0x01020304 - > 00000001000000100000001100000100 - > 1.2.3.4

+1

は、あなたが使用している言語を決定します(CおよびC++を異なる言語です) –

+0

16843008は '0x01010100'なく、あなたがその外の1.1.1.1を取得する方法がわからです。たぶん、あなたは0.1.1.1または1.1.1.0を意味するでしょうか? –

+0

実際には、入力からユニットを取ってほしいと思う順序は不明です –

答えて

0

多分あなたが欲しい:

ビット演算を使用して
char buf[16]; 
snprintf(buf, sizeof buf, "%u.%u.%u.%u", 
    (x/0x1000000u) % 0x100, 
    (x/0x10000u) % 0x100, 
    (x/0x100u) % 0x100, 
    (x) % 0x100); 
0

は、簡単に各オクテットを取得させることができます。このようなもの? (手元にありませんコンパイラ)

uint32_t ip = ....; 
ip & 0xFF; // last octet 
(ip >> 8) & 0xFF; // 2nd last octet 
(ip >> 16) & 0xFF; // 2nd octet 
ip >> 24; // first octet 
+0

はい、オクテットを抽出する方法はいくつかありますが、これらの4つのオクテットを文字列に連結する方法は何ですか? – gfever

+0

あなたの質問に特定してください。 Cスタイルの文字列や 'std :: string'を作成していますか? –

関連する問題