私は整数ベクトルを持っています。intを16進数に変換してcharバッファに格納します
vector <int> myvect;
ベクターデータを16進形式に変換して、char配列に格納したいと考えています。
整数値を(0x ..)の形式で16進数に変換してcharバッファに格納するにはどうすればよいですか?
私は整数ベクトルを持っています。intを16進数に変換してcharバッファに格納します
vector <int> myvect;
ベクターデータを16進形式に変換して、char配列に格納したいと考えています。
整数値を(0x ..)の形式で16進数に変換してcharバッファに格納するにはどうすればよいですか?
これを試してください。
#include <iostream>
#include <iomanip>
int main()
{
int input ;
std::cout << "Enter decimal number: " ;
std::cin >> input ;
std::cout << "0x" << std::hex << input << '\n' ;
}
あなたは順番にあなたが変換することができ、あなたが好きなものを保存するフォーマットされたの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;
}
しかし、私は強く、将来的にあなたが同様の質問を探している場合、コードを構成しようとすることを示唆していますあなたはまだ問題を解決する方法を知らず、次に新しい質問を投稿します。
私は、ユーザーが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;
}
上記機能はvector
unsigned integer
の値を取って、各value
ことがstringstream
クラスオブジェクトにbit shift
又はinsertion operators
を使用してhex value
に変換されます。すべての値の前に"0x"
があらかじめ付加されていて、値が<= 15
の場合は、より良い書式設定のために0
があらかじめ追加されています。これは、2カラムフォーマットの場合は255
または0xff
までしか動作しませんが、これは16進数の2つのカラムを占めるためですが、関数は255または0xffを超える数を変換します。これは、データ型がそのような数値をサポートできる限り、必要なだけ多くの桁で機能します。今度はchar array
に保存すると、std::string
をchar array
に変換できるはずです。
符号なし整数のベクトルが配置されているメインでは、それをu < 65536
に変更し、関数がその魔法を働かせることを見ることができます。最後の出力は0xffff
でなければなりません。これは10進数で65,535が16進数で0xffffに等しいため正しいはずです。
この記事はお役に立ちましたか?[似たような質問](http://stackoverflow.com/questions/5100718/integer-to-hex-string-in-c) – warl0ck
http://stackoverflow.com/questions/7787423/ c-get-nバイト目の整数 –