jeson配置文件字典

这是c++17的用法:

#include

#include <unordered_map>

#include

#include

#include <nlohmann/json.hpp>

// 使用nlohmann/json库

using json = nlohmann::json;

// 存储设备类型和单板类型的映射

std::unordered_map<int, std::string> deviceTypeMap;

std::unordered_map<int, std::string> boardTypeMap;

std::unordered_map<int, int> deviceIdentifierMap;

// 从配置文件中加载映射

void loadConfiguration(const std::string& configFile) {

std::ifstream file(configFile);

json config;

file >> config;

复制代码
for (auto& [key, value] : config["deviceTypes"].items()) {
    int intKey = std::stoi(key, nullptr, 16);
    deviceTypeMap[intKey] = value["name"];
    deviceIdentifierMap[intKey] = value["identifier"];
}
for (auto& [key, value] : config["boardTypes"].items()) {
    int intKey = std::stoi(key, nullptr, 16);
    boardTypeMap[intKey] = value;
}

}

// 解析MAC地址

void parseMacAddress(const std::string& mac) {

// 删除'-'分隔符

std::string macNoDash = mac;

macNoDash.erase(std::remove(macNoDash.begin(), macNoDash.end(), '-'), macNoDash.end());

复制代码
// 提取MAC地址中的字节
int byte1 = std::stoi(macNoDash.substr(0, 2), nullptr, 16);
int byte2 = std::stoi(macNoDash.substr(2, 2), nullptr, 16);
int byte3 = std::stoi(macNoDash.substr(4, 2), nullptr, 16);
int byte4 = std::stoi(macNoDash.substr(6, 2), nullptr, 16);
int byte5 = std::stoi(macNoDash.substr(8, 2), nullptr, 16);
int byte6 = std::stoi(macNoDash.substr(10, 2), nullptr, 16);

// 查找设备类型和标识符
std::string deviceType = deviceTypeMap[byte2];
int identifier = deviceIdentifierMap[byte2];
std::string boardType = boardTypeMap[byte5];

// 输出解析结果
std::cout << ": " << deviceType << std::endl;
std::cout << ": " << identifier << std::endl;
std::cout << ": " << byte4 << "槽" << std::endl;
std::cout << ": " << boardType << std::endl;
std::cout << ": " << byte6 << "口" << std::endl;

}

int main() {

// 从配置文件加载映射

loadConfiguration("config.json");

复制代码
// 示例MAC地址
std::string macAddress = "1234-3333-4566";

// 解析MAC地址
parseMacAddress(macAddress);

return 0;

}

配置文件:

"deviceTypes": {

"0x01": {"name": "hhh", "identifier": 1},

"0x02": {"name": "jjj", "identifier": 2},

"0x03": {"name": "hhhh", "identifier": 3},

复制代码
},
"boardTypes": {
    "0x00": "ggg",
    "0x01": "jjj",
    "0x02": "lllll",

},
相关推荐
wildlily842731 分钟前
C++ Primer 第5版章节题 第十章
开发语言·c++
低频电磁之道1 小时前
C++中类的this指针
开发语言·c++
水饺编程2 小时前
Visual Studio 软件操作:添加附加依赖项
c语言·c++·windows·visual studio
-To be number.wan2 小时前
C++ 进阶技巧:如何让 cout << 自定义对象 正常输出?
开发语言·c++
序属秋秋秋2 小时前
《Linux系统编程之进程控制》【进程创建 + 进程终止】
linux·c语言·c++·操作系统·进程·进程创建·进程终止
上天_去_做颗惺星 EVE_BLUE3 小时前
C++学习:学生成绩管理系统
c语言·开发语言·数据结构·c++·学习
John_ToDebug3 小时前
Chromium WebUI 定制实践:从 C++ 注入到 JS 安全展示全链路解析
javascript·c++·chrome
水饺编程3 小时前
开源项目介绍:VirtuaNES 模拟器
c语言·c++·windows·visual studio
十五年专注C++开发3 小时前
CMake进阶:find_package使用总结
开发语言·c++·cmake·跨平台编译
闻缺陷则喜何志丹3 小时前
【计算几何】平面凸包
c++·数学·扫描线·凸包·单调性·上凸包·下凸包