我有这行代码,我认为可能不是最好的:
get_entity_id () {
return ntohl(*(int*)(&data_[ENTITY_ID_INDEX]));
}
data_是char [],ENTITY_ID_INDEX是data_中存储整数的位置。
这编译并且似乎工作正常,但我想知道是否有更好的'这样做的方式。我是否使用C ++ 14,如果重要的话。
答案 0 :(得分:1)
您没有向我们提供有关data_
的更多信息。除非绝对必须,否则应该避免使用二进制数据。更好的方法是使用结构或类。具有原始二进制数据的一般情况是:(1)您的数据是完全定义的,在这种情况下,您可以轻松地将数据映射到结构上,或者(2)它是具有标题和可变长度二进制数据的数据。在第二种情况下,一个技巧是制作一个
struct包含头数据,并且结构的最后一个元素是长度为1的char数组,其中可变长度数据开始。
struct data_type
{
// real definition
char a[123];
...
int entity_id;
...
// end of header/fixed elements
char blob[1]; // beginning of some variable length data.
};
然后
sometype get_entity_id() {
return ntohl(static_cast< data_type& >(data_).entity_id);
}
*注意:如果对齐是@FrançoisAndrieux所指出的问题(即您打开在机器上编写的二进制文件或具有不同对齐规则的代码),这无济于事。