Char阵列中的特定索引的C 拉动签名整数

c++ pull signed integer from specific index in char array

本文关键字:整数 索引 阵列 Char      更新时间:2023-10-16

我有我认为不是最大的代码行:

get_entity_id () {
  return ntohl(*(int*)(&data_[ENTITY_ID_INDEX]));
}

data_是char [],entity_id_index是存储整数的位置。

这是编译的,似乎可以正常工作,但是我想知道是否有一种"更好"的方法。我正在使用C 14,如果很重要。

您没有给我们太多有关data_的信息。除非您绝对需要,否则在二进制数据中四处张开。更好的方法是使用结构或类。具有原始二进制数据的一般情况是(1)您的数据已完全定义,在这种情况下,您可以轻松地将数据映射到结构上,或者(2)它是带有标头和可变长度二进制二进制数据的数据。在第二种情况下,诀窍是做一个带有标头数据的结构,并具有结构的最后一个元素一个长度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指出的问题(即,您正在打开在计算机上写的二进制文件或具有不同对齐规则的代码)。