c++从16字节的字符数组中创建4个整数
c++ creating 4 integer from the 16 byte char array
我的问题是
我已经从二进制文件读取二进制序列到字符数组。我的二进制文件比我的缓冲区大得多,所以我迭代地读取它。
我已经从文件中读取了16个字节并将其存储到char * myPointer
指针中。现在从myPointer我需要创建4个整数,我不知道我怎么能做到这一点。有人来帮我吗?
注意:如果您有更好的解决方案,我不必将其存储到char数组中
如果存储数据的端序与系统的端序相同,则可以使用以下代码在int
中存储读取数据:
int ints[4];
char bytes[4*sizeof(int)];
memcpy( ints, bytes, sizeof( ints ) );
如果你的输入二进制文件和你的计算机有不同的字节序,你可能需要交换位:
template< class T>
void changeEndianess( T & input)
{
char temp[ sizeof( T ) ];
for( int j=sizeof( T )-1; j>=0; --j )
temp[sizeof(T)-j-1] = *((char *)&input+j);
memcpy( &input, temp, sizeof( T ) );
}
// and somewhere in your program:
for( size_t i=0; i<sizeof( ints ); ++i )
{
changeEndianess<int>( ints[i] );
}
要使其使用short
,将上述代码中的所有int
更改为short
,但由您决定何时需要
读取二进制文件:
#include <fstream>
#include <assert.h>
void main()
{
std::ifstream file("file.dat", std::ios_base::binary);
assert(file.is_open());
int i = 0;
file.read((void*)&i, sizeof(i));
short s = 0;
file.read((void*)&s, sizeof(s));
... // And so on
}
显然,您需要确切地知道如何解释数据,即文件结构(在哪里写入哪种数据类型)。
相关文章:
- C++win32 API创建多个类似视口的窗口
- 使用C++在Qt3D中创建多个视口时出现问题
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 类接口,可以创建N个方法
- 在函数中创建多个lock_guards
- 我如何创建一个列表,然后从中创建两个列表,其中一个用于偶数,另一个用于奇数?
- Makefile 创建两个库 - 一个依赖于另一个
- 如何创建两个具有相同名称和不同返回类型并基于布尔参数运行的函数
- 在 Visual Studio 的同一项目中创建多个C++文件
- 创建 N 个零的index_sequence
- 创建第二个应用窗口并显示它
- 在C++中使用循环创建多个对象
- 如何在C++中创建多个类?
- 在 C++ 中创建两个不同的二叉树时出现分段错误
- 程序什么时候会创建多个堆
- 基于模板参数创建多个类实现
- 使用用户输入 C++ 创建 N 个不同的向量
- 在一个类中创建多个对象
- 我们可以在层次结构中创建多个纯虚拟接口及其实现而不会代码爆炸吗?
- 在C++到第一个对象中创建第二个对象时,第一个对象会去哪里?