我有一个整数向量。
vector <int> myvect;
我想将矢量数据转换为十六进制格式并将其存储到char数组中。
如何将整数值转换为(0x ..)形式的十六进制并将其存储到char缓冲区?
答案 0 :(得分:2)
您可以使用此类函数将任何类型转换为十六进制格式的std :: string,然后您可以转换并存储到您喜欢的任何类型。
模板化功能及其依赖包括:
#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;
}
但我强烈建议您将来寻找类似问题并尝试撰写代码,如果您仍然不知道如何解决问题,请发布新问题。
答案 1 :(得分: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 :(得分: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
,它会使用hex value
或{bit shift
将其转换为insertion operators
{1}}类对象上的{1}}。它会在所有值之前预先附加stringstream
,如果值为"0x"
,它还会预先附加<= 15
以获得更好的格式,否则它只会填充值。对于2列格式,这仅适用于0
或255
,因为这仅占十六进制数中的2列,但该函数仍将转换超过255或0xff的数字。只要数据类型可以支持这样的数字,这将适用于您需要的任意数字。现在将其保存为0xff
我确定您应该能够将char array
转换为std::string
。
在正在填充无符号整数向量的主要部分中,您可以将其更改为char array
并观察该函数的工作原理。最后一个输出应该是u < 65536
,这应该是正确的,因为十进制中的65,535等于十六进制中的0xffff。