我正在处理嵌入式设备的API,需要显示(通过API)生成的图像。连接到设备的屏幕允许我渲染位图,数据存储为unsigned char image[] = { 0B00000000, 0B00001111, 0B11111110... }
。
以任何所需格式反序列化字符串的最简单方法是什么?
我的方法是创建一个stringstream
,用逗号分隔并推送到vector<char>
。但是,渲染位图的功能只接受char
,而我在网上找到的内容似乎很难转换它。理想情况下,我根本不使用vector
,因为包含它会为项目增加几个kbs,其大小受嵌入式设备的下载速度限制(固件由EDGE传输)和车载存储。
答案 0 :(得分:0)
从评论中,听起来你想要转换由一系列&#34; 0b00000000&#34;组成的字符串。样式文字,逗号分隔,成为其实际值的数组。我这样做的方式是:
std::vector
unsigned char
来保存结果。std::bitset
,然后获取其实际值。这是一个代码示例。既然你说过你不使用vector
我使用了C风格的数组和字符串:
#include <bitset>
#include <cstring>
#include <iostream>
#include <memory>
int main() {
auto input = "0b00000000,0b00001111,0b11111111";
auto length = strlen(input);
// Get the number of bytes from the string length. Each byte takes 10 chars
// plus a comma separator.
int size = (length + 1) / 11;
// Allocate memory to hold the result.
std::unique_ptr<unsigned char[]> bytes(new unsigned char[size]);
// Populate each byte individually.
for (int i = 0; i < size; ++i) {
// Create the bitset. The stride is 11, and skip the first 2 characters
// to skip the 0b prefix.
std::bitset<8> bitset(input + 2 + i * 11, 8);
// Store the resulting byte.
bytes[i] = bitset.to_ulong();
}
// Now loop back over each byte, and output it to confirm the result.
for (int i = 0; i < size; ++i) {
std::cout << "0b" << std::bitset<8>(bytes[i]) << std::endl;
}
}