c++ - 将文件中的字节转换为整数 C++

标签 c++ parsing byte

我正在尝试解析一个 .dat 文件,用这段代码逐字节读取它。(文件名在 arv[1] 中)

   std::ifstream is (arv[1], std::ifstream::binary);
      if (is) {

        is.seekg (0, is.end);
        int length = is.tellg();
        is.seekg (0, is.beg);

        char * buffer = new char [length];

        is.read (buffer,length);

        if (is)
          std::cout << "all characters read successfully.";
        else
          std::cout << "error: only " << is.gcount() << " could be read";
        is.close();
    }

现在所有文件都在 buffer 变量中。该文件包含以 32 位表示的数字,我如何遍历缓冲区一次读取 4 个字节并将它们转换为整数?

最佳答案

首先,你有内存泄漏,你动态分配字符数组但从不删除[]它们。 使用 std::string 代替:

std::string buffer(length,0);
is.read (&buffer[0],length);

现在,假设您已正确写入整数,并将其正确读入缓冲区,您可以使用此字符数组作为指向整数的指针:

int myInt = *(int*)&buffer[0];

(你明白为什么吗?) 如果您存储了不止一个整数:

std::vector<int> integers;
for (int i=0;i<buffer.size();i+=sizeof(int)){
 integers.push_back(*(int*)&buffer[i]);
}

关于c++ - 将文件中的字节转换为整数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477638/

相关文章:

javascript - 在 JSON 对象的 html 页面上的 ListView 中显示图像和描述

c# - C++/CLI 中的 System::IntPtr 到 int*

c++ - 使用 ReadProcessMemory 读取 std::map<string, string>

c++ - 如何解决 Windows 10 "Threshold 2"更新(1511,内部版本 15086)后应用程序无法启动并出现 STATUS_DLL_INIT_FAILED (0xc0000142)

javascript - 是否有可用的基于 Javascript 的良好 HTML 解析库?

java - 无法使用 dom4j 从 xml 字符串解析节点

Java 将 00010 打印为 8

Java ByteBuffer.wrap(byte[]),如果 byte[] 按小尾数排序,尾数会发生什么变化

java - 如何存储到 Byte 或 Byte 数组中

c++ - 在 C++11 中定义元组常量 vector 的更简洁方法