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",

},
相关推荐
FlightYe30 分钟前
音视频修炼之容器与协议(一):MP4和MOV的box剖析
android·linux·c++·ffmpeg·音视频
音草1 小时前
AVL 树详解:从概念到 C++ 实现
c++
凉茶钱1 小时前
list:哨兵节点,const_iterator 和 const iterator的区别与迭代器失效
数据结构·c++·list
沫璃染墨1 小时前
从零入门计算机网络系列(六):TCP套接字编程实战——从listen监听到客户端与服务器通信
linux·服务器·c++·tcp/ip·计算机网络·tcp
努力实干2 小时前
C++ 面向对象与工程架构
开发语言·c++·架构
代钦塔拉2 小时前
【C++/Qt 进阶】设计模式系列(6):桥接模式——把“两个独立变化的维度“拆开
c++·qt·设计模式
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C/C++考级:任意进制互转与大数多进制加法解析
c++·python·算法·bfs·信息学竞赛
Shadow(⊙o⊙)2 小时前
仿muduo实现高并发服务器——EPOLL设置与移除Poller.hpp管理Channel
运维·服务器·c++
闻缺陷则喜何志丹3 小时前
【C++特性及类库】多线程
开发语言·c++·多线程·语言特性·系统库
多弗朗皮卡丘3 小时前
C++ 哈希(下)
c++·算法·哈希算法