将int转换为十六进制并将其存储到char缓冲区中

时间:2017-01-20 06:09:16

标签: c++

我有一个整数向量。

vector <int> myvect;

我想将矢量数据转换为十六进制格式并将其存储到char数组中。

如何将整数值转换为(0x ..)形式的十六进制并将其存储到char缓冲区?

3 个答案:

答案 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列格式,这仅适用于0255,因为这仅占十六进制数中的2列,但该函数仍将转换超过255或0xff的数字。只要数据类型可以支持这样的数字,这将适用于您需要的任意数字。现在将其保存为0xff我确定您应该能够将char array转换为std::string

在正在填充无符号整数向量的主要部分中,您可以将其更改为char array并观察该函数的工作原理。最后一个输出应该是u < 65536,这应该是正确的,因为十进制中的65,535等于十六进制中的0xffff。