- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我读取了一个文件并将其转换为这样的十六进制表示法 {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/
我试图让我的输出看起来像这样: size time1 time2 ------------------------------- 10 4
我正在尝试在 Java 中传递一个变量,我需要帮助让它工作,我在下面包含了所有相关代码,我正在使用三个 .java 文件。以下是所有设置的方式以及我需要它的工作方式; 属性.java public e
要点如下:我有一个 getColor 方法和一个 setColor 方法。 getColor 将全局指针 color_obj 更新为当前对象。 setColor 使用该指针来更改对象的颜色。 问题是,
我正在尝试创建一个基于多个文件的程序来读取时间,但我无法以所需的格式显示时间。更具体地说,setfill 似乎给我带来了问题。 这是我在编译时收到的一条很长的错误消息的开头: error: no ma
我试图了解 JavaFX Canvas setStroke 方法的工作原理。它不会将像素的颜色设置为所需的值。不过 setFill 方法没有问题。 Canvas canvas = new Canvas
这个问题已经有答案了: Can we call a method at class level rather than in a method? (3 个回答) 已关闭 3 年前。 我正在启动 Jav
我正在编写一款受康威的“生命游戏”启发的游戏。 虽然我已经弄清楚了整体游戏逻辑(但没有编码),但我仍然无法在玩家的第一个回合结束后更改矩形对象的填充颜色。当我运行我的程序时,它会跳过对玩家一号颜色(C
基本上,我正在尝试通过 setfill 和 setw 创建一个固定表来显示存储在数组中的信息,但是设置宽度似乎没有起作用,我不确定为什么。这是我正在使用的代码: const int MAXWIDTH
我有两个并排的函数,它们循环不断地绘制两个 UIBezierPaths,问题是,它们每个都有不同的颜色,所以我经常需要重申 UIColor.blackColor().setFill() 和 UICol
根据我的理解,setw(n) 通过创建一个宽度为 n 个字符的行为。另一方面,setfill('x') 允许我们打印 n 个 x 个字符。 我想得到两排星星,像这样: ****************
所以我已经解决这个问题一段时间了,在成员的帮助下,我快完成了。我的最后一个问题在上面。 如有必要,我需要将 cout 时间格式化为 01:01:01,但是,我的输出是 1:1:1 问题出在这里: st
Win7 - 64 cygwin Netbeans 7.4 gcc (cygwin) 4.8.3 编译器调用 g++ -Wall -Wno-reorder -Wno-unused-value -c -
在 C++ 中: int main() { cout << setfill('#') << setw(10) << 5 << endl; return 0; } 输出: #######
我有一个现有的代码库,它创建了一个舞台,然后添加了一些图层,并在其中一个图层中绘制了 KineticJS 多边形。现在我需要在用户单击舞台外的元素时更新多边形的背景。 我已经设法获取了舞台细节,然后是
我有一些 Java 代码: public static String getSaveFilePath(String title2) { FileDialog fd = new FileDial
一个简单的 C++ 乘法表。 int main() { int i, j; i = j = 1; for (i; i < 10; i++) { for (j = 1
我不明白为什么这段代码在 drawRect: 中有效: UIBezierPath *buildingFloor = [[UIBezierPath alloc] init]; // draw the s
我很好奇 std::setw 和 std::setfill 的真正返回类型 正如我们所见,它们返回值的数据类型是“未定义”。但是,是否可以声明一个没有返回类型的函数? 在我必须开发一种方法为“cout
所以我知道有很多次我想重置我使用 iomanip 所做的格式更改。我创建了一个类,您可以使用它来获取 ostream 对象的格式,例如用于写入/读取文件的 std::cout 或 fstream 对象
我正在尝试使用 setw 和 setfill 获得以下输出: OPTIONS: The usual operators +, -, *, / and % (remainder)
我是一名优秀的程序员,十分优秀!