C++ 如何将nlohmann json转换为uint8_t数组?

C++ 如何将nlohmann json转换为uint8_t数组?,c++,c++11,nlohmann-json,C++,C++11,Nlohmann Json,我想将我创建的json对象转换为uint8_t[1000]的数组。我试过这样的方法: nlohmann::json j_file; j_file["number"] = 2; j_file["example"] = "dog"; uint8_t parsed_json[1000] ={0}; auto str = j_file.dump(); std::vector<std::ui

我想将我创建的json对象转换为uint8_t[1000]的数组。我试过这样的方法:

    nlohmann::json j_file;
    j_file["number"] = 2;
    j_file["example"] = "dog";

    uint8_t parsed_json[1000] ={0};
    auto str = j_file.dump();
    std::vector<std::uint8_t> v (str.begin(), str.end());
    std::copy(v.begin(), v.end(), parsed_json);
nlohmann::json j_文件;
j_文件[“编号”]=2;
j_文件[“示例”]=“狗”;
uint8_t解析的_json[1000]={0};
auto str=j_file.dump();
向量v(str.begin(),str.end());
std::copy(v.begin()、v.end()、解析的_-json);

但是有没有更简单的方法将json转换为uint8_t数组?

您可以将
std::string
的内容复制到数组中,而无需使用
std::vector
作为代理

    uint8_t parsed_json[1000] ={0};
    auto str = j_file.dump();
    std::copy(str.begin(), str.end(), parsed_json);

潜在的XY问题:可能根本不需要转换为数组。您可以重新解释指向字符串的指针,而无需复制任何内容:

static_assert(std::is_same_v<unsigned char, std::uint8_t>);
std::uint8_t* parsed_json = reinterpret_cast<std::uint8_t*>(str.data());
静态断言(std::is_same_v);
std::uint8_t*parsed_json=reinterpret_cast(str.data());

避免复制不仅效率更高,而且在JSON很长的情况下也会修复缓冲区溢出错误。

A
std::string
std::vector
非常相似,可以在大多数容器算法中用作插入式替换。您真的需要这种转换吗?您的代码容易受到缓冲区溢出的影响。
parsed_json[1000]
的目的是什么?为什么不将其保存在
std::string
中,以避免松开
size()
<代码>常量自动&tmp=j_file.dump();std::basic_string str(tmp.data(),std::next(tmp.data(),tmp.size())str.data()来获得你的
uint8.\u t*
+你也有
str.size()
。这在大多数实现中都会起作用,但据我所知,这在技术上是未定义的行为。Nvm,看来我错了:@PeterT演员本身从来都不是UB。如果
std::uint8\u t
不是
unsigned char
的别名,理论上通过指针进行技术访问可能是UB。但它总是在定义时(在我所看到的所有C++实现中)。我添加了修改,以确保即使在这种理论情况下,示例中也没有UB。