Char阵列中的特定索引的C 拉动签名整数
c++ pull signed integer from specific index in char array
我有我认为不是最大的代码行:
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指出的问题(即,您正在打开在计算机上写的二进制文件或具有不同对齐规则的代码)。
相关文章:
- 跟随整数索引列表的自定义类迭代器
- 如果索引不是整数,我们如何在 C++ 中插入哈希表
- 如何更好地表示 6 个整数键而不是作为 6 维数组的索引?
- 如何使用递归函数返回数组中整数的索引?
- 我无法显示包含整数最大值的索引. 但我可以显示数组中整数的最高值
- 通过字符串的字符对整数数组进行索引
- 可以使用整数索引访问向量元素吗?
- 数组索引在地图上不是整数
- Char阵列中的特定索引的C 拉动签名整数
- 如何将整数存储在字符数组的单个索引中
- 阵列索引(转换为整数)用范围枚举
- SDL_JoystickName C++ 中的整数索引
- 将多个整数添加到一个向量索引? 'Cout'不起作用
- 在C++中为整数指针编制索引
- C++ 中 15000 数组索引之后的不相关整数标准输入
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- 如何使用模板创建排序映射整数索引
- 数组索引的类型:有符号/无符号整数先锋
- 使用链式#define来声明纯语言的整数索引是个好主意吗?
- 从整数索引的for循环枚举到range-for