C++ 将双倍转换为字符并替换为标准::数组
C++ Cast double to char and replace into std::array
出于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为最终用户提供"人类可理解"的界面?
在生产/发布中使用此代码是否有任何问题?
是的,此代码取决于平台。
数据将以不同的方式存储在大端序平台和小端序平台中。
如果您指望两个系统相互通信(传输和接收此数据),那么您必须确保双方都使用具有相同字节序的平台。
相关文章:
- 如何在C++代码中灵活使用和替换标准::shared_ptr或标准::unique_ptr或原始指针?
- 替换标准::映射值时崩溃
- 标准::替换的逻辑错误
- 使用标准库将循环替换为 strtok
- 标准目录中包含的文件可以静默替换现有宏
- C++ 将双倍转换为字符并替换为标准::数组
- 是否可以保证C++标准库容器调用可替换的新功能
- 有没有办法将模板的替换失败转换为布尔值(真/假)或标签(标准::true_type/标准::false_type)
- 是否有一种替换C风格的Bool数组的标准方法
- 在C++标准中,它在哪里指示用它所代表的源代码替换类别描述符的间隔协议
- C++库来替换标准 CSTDIO
- 用开源或标准类替换Rogue Wave软件组件
- 是否有标准名称(模板或宏)来替换ARRAY_SIZE、_countof等
- 将标准的Android H264软件编码器替换为基于ffmpeg的编码器
- 如何在标准多重映射中替换<键、值>
- C++ - 在文本文件中查找和替换(标准系统库)
- 简单的标准::字符串替换在C++
- 解决标准::替换编译错误
- 用标准c++函数替换QByteArray
- printf的c++标准替换