C ++将double转换为char并替换为std :: array

时间:2017-01-25 08:32:35

标签: c++ arrays c++11

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

所以我的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函数?
  • 这是否可以抵御内存泄漏?
  • 在生产/发布中使用此代码有什么问题吗?

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

1 个答案:

答案 0 :(得分:1)

  

在生产/发布中使用此代码有什么问题吗?

是的,此代码与平台有关。

数据将以不同方式存储在Big-Endian平台和Little-Endian平台中。

如果你指望两个系统相互通信(发送和接收这些数据),那么你必须确保双方都使用相同Endianness的平台。