ZBLOG

busctl call xyz.openbmc_project.Smbios.Inventory /xyz/openbmc_project/inventory/redfishBios/Chassis0/NetworkAdaptersDevType7_NIC1 org.freedesktop.DBus.Properties GetAll s xyz.openbmc_project.redfishBios.Inventory.NetworkAdapters a{sv} 18 "Associat...

在你提供的代码中,Temp 的值应该是一个整数(50),但是你使用 std::get<int64_t>(data.second) 来获取这个值可能导致了问题。原因有几个方面:

  1. 类型不匹配:从 D-Bus 获取到的 Temp 值是一个 int32_t 或者 uint32_t 类型,而不是 int64_t。如果你的实现中将其存储为小于 64 位的整数,而你用的是 64 位变量来接收它,那么会出现类型不匹配的问题。

  2. Variant 使用不当:如果你使用的是 std::variant 等类似结构,那么你需要确保正确处理所有可能的类型。如果 D-Bus 返回的数据类型不是预期的整型,则会引发异常。

  3. Debugging 输出:建议在尝试提取值之前,打印出数据类型信息,以便确认该值实际存储的是什么类型。例如,可以通过以下方式检查:

  1. for (const auto& data : properties)
  2. {
  3. std::cout << "data.first : " << data.first << std::endl;
  4. if (data.first == "CardModel")
  5. {
  6. cardModel = std::get<std::string>(data.second);
  7. }
  8. else if (data.first == "Temp")
  9. {
  10. // 打印出当前值和数据类型
  11. std::cout << "Type of Temp: " << data.second.index() << std::endl; // 如果使用std::variant
  12. if (std::holds_alternative<int32_t>(data.second)) // 假设 Temp 是 int32_t
  13. {
  14. temp = static_cast<int64_t>(std::get<int32_t>(data.second));
  15. std::cout << "temp : " << temp << std::endl;
  16. }
  17. else if (std::holds_alternative<uint32_t>(data.second)) // 假设 Temp 也可能是 uint32_t
  18. {
  19. temp = static_cast<int64_t>(std::get<uint32_t>(data.second));
  20. std::cout << "temp : " << temp << std::endl;
  21. }
  22. else
  23. {
  24. std::cerr << "Unexpected type for Temp!" << std::endl;
  25. }
  26. }
  27. }
  1. DBus 返回的数据结构:根据返回的信息,确保你对返回数据进行正确解读,有时它们可能包含额外的信息或不同格式的数据。因此,在解析这些属性时要谨慎并考虑多种可能性。

通过上述方法,你应该能够找出为什么无法正确获取到温度值的原因,并据此进行调整。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22883

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?