2017-01-20 13 views
-3

私は整数ベクトルを持っています。intを16進数に変換してcharバッファに格納します

vector <int> myvect; 

ベクターデータを16進形式に変換して、char配列に格納したいと考えています。

整数値を(0x ..)の形式で16進数に変換してcharバッファに格納するにはどうすればよいですか?

+1

この記事はお役に立ちましたか?[似たような質問](http://stackoverflow.com/questions/5100718/integer-to-hex-string-in-c) – warl0ck

+0

http://stackoverflow.com/questions/7787423/ c-get-nバイト目の整数 –

答えて

0

これを試してください。

#include <iostream> 
#include <iomanip> 

int main() 
{ 
    int input ; 
    std::cout << "Enter decimal number: " ; 
    std::cin >> input ; 
    std::cout << "0x" << std::hex << input << '\n' ; 
} 
2

あなたは順番にあなたが変換することができ、あなたが好きなものを保存するフォーマットされたのstd ::文字列を、Hexに任意の型を変換するには、このような機能を使用することができます。そしてそれが依存しています

鋳型と機能が含まれています:

#include <string> 
#include <sstream> 
#include <iomanip> 

template<typename T> 
typename std::enable_if<std::is_integral<T>::value, std::string>::type   
toHex(const T& value) { 
    std::stringstream convertingStream; 
    convertingStream << "0x" << std::setfill('0') << std::setw(sizeof(T) * 2) << std::hex << value; 
    return convertingStream.str(); 
} 

と機能の使用状況:

#include <vector> 

int main() { 
    std::vector<int> myvect; 
    myvect.push_back(2); 
    myvect.push_back(33); 
    myvect.push_back(66); 
    myvect.push_back(99); 
    myvect.push_back(-1); 
    myvect.push_back(-1024); 

    std::vector<std::string> mybuff; 

    for (const auto& integer : myvect) { 
     mybuff.push_back(toHex(integer)); 
     printf("%s\n", (*mybuff.rbegin()).c_str()); 
    } 
    return 0; 
} 

しかし、私は強く、将来的にあなたが同様の質問を探している場合、コードを構成しようとすることを示唆していますあなたはまだ問題を解決する方法を知らず、次に新しい質問を投稿します。

0

私は、ユーザーがchar配列に格納するように頼んでいることを知っていますが、簡略化のためにstd::stringを使用することを選択しました。それが何をしているのかを見るだけでこの機能を見てください。

#include <string> 
#include <vector> 
#include <stringstream> 
#include <iostream> 


std::vector<std::string> decimalToHex(std::vector<unsigned> decimalValues) { 
    std::vector<std::string> output; 
    for each (auto value in decimalValues) { 
     std::stringstream hex; 
     hex << "0x"; 
     if ((value % 16) == 0) { 
      hex << "0"; 
      hex << std::hex << decimalValues[value]; 
     } else { 
      hex << std::hex << decimalValues[value]; 
     } 
     output.push_back(hex.str()); 
    } 
    return output; 
} 

int main() { 
    std::vector<unsigned values>; 
    for (unsigned u = 0; u < 256; u++) { 
     values.push_back(u); 
    } 

    std::vector<std::string> results = decimalToHex(values); 

    for (unsigned u = 0; u < results.size(); ++u) { 
     std::cout << results[u] << std::endl; 
    } 

    return 0; 
} 

上記機能はvectorunsigned integerの値を取って、各valueことがstringstreamクラスオブジェクトにbit shift又はinsertion operatorsを使用してhex valueに変換されます。すべての値の前に"0x"があらかじめ付加されていて、値が<= 15の場合は、より良い書式設定のために0があらかじめ追加されています。これは、2カラムフォーマットの場合は255または0xffまでしか動作しませんが、これは16進数の2つのカラムを占めるためですが、関数は255または0xffを超える数を変換します。これは、データ型がそのような数値をサポートできる限り、必要なだけ多くの桁で機能します。今度はchar arrayに保存すると、std::stringchar arrayに変換できるはずです。

符号なし整数のベクトルが配置されているメインでは、それをu < 65536に変更し、関数がその魔法を働かせることを見ることができます。最後の出力は0xffffでなければなりません。これは10進数で65,535が16進数で0xffffに等しいため正しいはずです。

関連する問題