gpt4 book ai didi

c++ - 如何使用 setfill 和 setw 在字符串变量中存储十六进制值

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:10 25 4
gpt4 key购买 nike

我读取了一个文件并将其转换为这样的十六进制表示法 {0x4D,x0FF,0x01}我将它存储在一个无符号字符数组中。我可以打印我想要存货的东西,但我没有在我的阵列中实现存货数据。我阅读了 bitset 类文档,但我不确定它是否是我需要的。根据此源代码,我如何存储读取的数据以获得与此相同的结果:

unsigned char array[3] = {0x4D,x0FF,0x01};

请注意, vector 没有很好的表示法,这就是我使用 setfill 和 setw 的原因。

    size = file.tellg();
unsigned char* rawData = new unsigned char[size];
memblock = new uint8_t[size];
std::vector<uint8_t> memblock(size);
file.seekg(0, ios::beg);
file.read(reinterpret_cast<char*>(memblock.data()), size);
file.close();
for (int i = 0; i < size; i = i++)
{
if (i == (int)size - 1)
{
cout << "0x" << setfill('0') << setw(2) << std::hex << (unsigned)memblock.at(i);
}
else
{
cout << "0x" << setfill('0') << setw(2) << std::hex << (unsigned)memblock.at(i) << ",";
}

}

编辑:这是我的实际代码:

    unsigned char* rawData[1] = {0x00}; // My rawData in out of function.

void readFile(std::string p_parametre, unsigned char* rawData[])
{
std::ifstream input{ p_parametre, std::ios::binary };
if (!input.is_open()) { // make sure the file could be opened
std::cout << "Error: Couldn't open\"" << p_parametre << "\" for reading!\n\n";
}

// read the file into a vector
std::vector<unsigned char> data{ std::istream_iterator<unsigned char>{ input },
std::istream_iterator<unsigned char>{} };

std::ostringstream oss; // use a stringstream to format the data

// instead of the glyph
for (int i = 0; i < data.size(); i++)
{
if (i == i- 1)
{
oss <<'0'
<< 'x'
<< std::setfill('0') << std::setw(2) << uppercase << std::hex << static_cast<int>(data.at(i));
}
else
{
oss << '0'
<< 'x'
<< std::setfill('0') << std::setw(2) << uppercase << std::hex << static_cast<int>(data.at(i)) << ',';
}

}

// create a unique_ptr and allocate memory large enough to hold the string:
std::unique_ptr<unsigned char[]> memblock{ new unsigned char[oss.str().length() + 1] };

// copy the content of the stringstream:
int r = strcpy_s(reinterpret_cast<char*>(memblock.get()), oss.str().length() + 1, oss.str().c_str());

OpenFile(memblock.get());
getchar();
}

最佳答案

#include <cstdlib>
#include <vector>
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <iterator>
#include <memory>
#include <cstring>

int main()
{
char const *input_filename{ "test.txt" };
std::ifstream input{ input_filename, std::ios::binary };
if (!input.is_open()) { // make sure the file could be opened
std::cout << "Error: Couldn't open\"" << input_filename << "\" for reading!\n\n";
return EXIT_FAILURE;
}

// read the file into a vector
std::vector<unsigned char> data{ std::istream_iterator<unsigned char>{ input },
std::istream_iterator<unsigned char>{} };

std::ostringstream oss; // use a stringstream to format the data
for (auto const &d : data) // iterate over every element in vector data
oss << std::setw(2) // set the field-width to 2
<< std::setfill('0') // fill up unused width with '0' instead space
<< std::hex // output as hex number
<< static_cast<int>(d); // cast the character to an int cause we
// want to print the numeric representation
// instead of the glyph

// > Exact, I would like each byte as hex in my unsigned string array.

// create a unique_ptr and allocate memory large enough to hold the string:
std::unique_ptr<unsigned char[]> memblock{ new unsigned char[oss.str().length() + 1] };

// copy the content of the stringstream:
std::strcpy(reinterpret_cast<char*>(memblock.get()), oss.str().c_str());
}

关于c++ - 如何使用 setfill 和 setw 在字符串变量中存储十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52562014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com