C++ 将双倍转换为字符并替换为标准::数组

C++ Cast double to char and replace into std::array

本文关键字:替换 标准 数组 字符 转换 C++      更新时间:2023-10-16

出于RAM优化目的,我需要将我的数据存储为std::array<char, N>,其中N是数组的"模板化size_t"大小。我需要管理包含任何类型的数据(数字和字符)的大量"Line"对象。

所以我的 Line 类是:

template<size_t NByte>
class Line {
public:
  Line (std::array<char, NByte> data, std::vector<size_t> offset) :
      _data(data), _offset(offset) {}
  template<typename T>
  T getValue (const size_t& index) const {
    return *reinterpret_cast<const T*>(_data.data() + _offset[index]);
  }
  template<typename T>
  void setValue (const size_t& index, const T value) const {
    char * new_value = const_cast<char *>(reinterpret_cast<const char *>(&value));
    std::move(new_value, new_value + sizeof(T), const_cast<char *>(_data.data() + _offset[index]));
  }
private:
  std::array<char, NByte> _data;
  std::vector<size_t> _offset;
};

我的问题是:

  • 有没有更好的方法来执行二传手和吸气器功能?
  • 这是否对内存泄漏具有鲁棒性?
  • 在生产/发布中使用此代码是否有任何问题?

编辑:这些背后的问题是:有没有其他方法可以在内存中处理二进制数据,并通过setter和getter为最终用户提供"人类可理解"的界面?

在生产/发布中使用此代码是否有任何问题?

是的,此代码取决于平台。

数据将以不同的方式存储在大端序平台和小端序平台中。

如果您指望两个系统相互通信(传输和接收此数据),那么您必须确保双方都使用具有相同字节序的平台。