标签: binaryfiles

逐字节读取二进制istream

我试图使用ifstream逐字节读取二进制文件.我之前使用像get()之类的istream方法一次读取二进制文件的整个块而没有问题.但是我目前的任务有助于逐字节地进行,并依靠io系统中的缓冲来提高效率.问题是我似乎比我应该更快地到达文件的末尾几个字节.所以我写了以下测试程序:

#include <iostream>
#include <fstream>

int main() {
    typedef unsigned char uint8;
    std::ifstream source("test.dat", std::ios_base::binary);
    while (source) {
        std::ios::pos_type before = source.tellg();
        uint8 x;
        source >> x;
        std::ios::pos_type after = source.tellg();
        std::cout << before << ' ' << static_cast<int>(x) << ' '
                  << after << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会转储test.dat的内容,每行一个字节,显示前后的文件位置.

果然,如果我的文件碰巧有两个字节的序列0x0D-0x0A(对应于回车和换行),则跳过这些字节.

  • 我以二进制模式打开了流.不应该阻止它解释行分隔符吗?
  • 提取操作员总是使用文本模式吗?
  • 从二进制istream中逐字节读取的正确方法是什么?

Windows上的MSVC++ 2008.

c++ binaryfiles istream

23
推荐指数
3
解决办法
3万
查看次数

\ x00在二进制文件中的含义是什么?

有一次我问过一个人"ASCII和二进制文件有什么区别?"

他说"二进制文件总是有\ x00"

我一直在搜索这个,发现PHP中的\ x00,\ x04是什么意思

所以结论是,ASCII文件没有NULL字符?

binary ascii binaryfiles file

22
推荐指数
1
解决办法
4万
查看次数

如何读取/写入二进制文件中的结构?

我正面临一个小问题.我有一个结构,它有一个向量.请注意,向量在每次迭代时都是动态的.现在,在特定的迭代中,如何将包含大小为n的向量的结构存储到二进制文件中?

另外,在检索时,假设我知道向量的大小,如何从二进制文件中检索,包含所有存储元素的向量的struct变量?

我可以将内容存储到二进制文件中(因为我可以看到写入时大小增加),但是当我尝试检索元素时,我将向量的大小设置为零.

不幸的是,我必须使用标准STL来实现这一点,而不是使用任何第三方库.

c++ struct binaryfiles vector

21
推荐指数
2
解决办法
6万
查看次数

使用python从二进制文件中读取32位带符号的ieee 754浮点数?

我有一个二进制文件,它是一个简单的有符号32位ieee754浮点数的列表.它们没有被任何东西分开,只是一个接一个地出现直到EOF.

我如何读取此文件并将其正确解释为浮点数?

我尝试使用read(4),但它会自动将它们转换为带有ascii编码的字符串.

我也尝试过使用,bytearray但我只需要一次1个字节,而不是一次4个字节.

python floating-point parsing binaryfiles ieee-754

19
推荐指数
2
解决办法
2万
查看次数

反斜杠零分隔符'\ 0'

我已经看到'\0'在混合二进制文件(UTF8字符串+二进制数据)中用作分隔符.任何人都可以解释什么'\0'意思或指向一个好学习的地方?

binary binaryfiles delimiter

19
推荐指数
3
解决办法
3万
查看次数

Fortran未格式化的文件格式

我不明白fortran中未格式化文件的格式.

例如:

open (3,file=filename,form="unformatted",access="sequential")
write(3) matrix(i,:)
Run Code Online (Sandbox Code Playgroud)

将矩阵列输出到文件中.我发现它在两端填充了4个字节的文件,但是我真的不明白为什么,或者如何控制这种行为.有没有办法删除填充?

谢谢

fortran binaryfiles binary-data

19
推荐指数
3
解决办法
3万
查看次数

什么是二进制文件的EOF?条件?字符?

我已经掌握了这个知识,这EOF是一个在文本文件末尾自动插入的特殊字符,以表明它的结束.但我现在觉得有必要对此作一些澄清.我检查了谷歌和维基百科页面,EOF但他们无法回答以下内容,并且没有确切的Stack Overflow链接.所以请帮助我:

  • 我的书说二进制模式文件根据文件目录条目中存在的字符数来跟踪文件的结尾.(与具有特殊EOF字符标记结尾的文本文件形成对比).那么EOF二进制文件的上下文是什么?我很困惑,因为在以下程序中,我在二进制模式下!=EOF.exe文件读取时成功使用了比较:

     #include<stdio.h>
     #include<stdlib.h>
    
     int main()
     {
    
      int ch;   
      FILE *fp1,*fp2;
    
      fp1=fopen("source.exe","rb");
      fp2=fopen("dest.exe","wb");
    
      if(fp1==NULL||fp2==NULL)
      {
      printf("Error opening files");
      exit(-1);
      }
    
      while((ch=getc(fp1))!=EOF)
      putc(ch,fp2);
    
      fclose(fp1);
      fclose(fp2);
    
      }
    
    Run Code Online (Sandbox Code Playgroud)
  • EOF一个特殊的"角色"吗?或者它是一个条件为维基说,当计算机知道何时返回像一个特定值的情况-1(EOF我的电脑上)?这种"条件"的例子是当字符读取功能完成读取所有存在的字符,或者字符/字符串I/O功能在读/写时遇到错误时?

    有趣的是,Stack Overflow标签用于EOF混合那些定义 EOF.EOF所述"在编程领域中的标签,EOF是一个字节序列(或一个字符),表示此后没有更多的内容." 虽然它在"约"部分也说过" 文件结尾(通常缩写为EOF)是计算机操作系统中不能从数据源读取数据的条件.数据源通常称为文件或流."

但我强烈的感觉EOF不会是一个角色,因为在I/O期间遇到错误时,其他所有函数似乎都会返回它.

如果你能为我解决这个问题,那将是非常好的.

c binaryfiles eof

19
推荐指数
1
解决办法
2万
查看次数

将.EXE编码/解码为Base64

我有一个.NET exe文件,我想将其编码为Base-64字符串,然后在稍后使用Powershell从Base64字符串解码为.exe文件.

到目前为止我生成的.exe文件,然而,该文件不能被Windows识别为可以运行的应用程序,并且总是与我传入编码脚本的文件长度不同.

我想我可能在这里使用了错误的编码,但我不确定.

编码脚本:

Function Get-FileName($initialDirectory)
{   
 [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
$OpenFileDialog.filter = "All files (*.*)| *.*"
$OpenFileDialog.ShowDialog() | Out-Null
$FileName = $OpenFileDialog.filename
$FileName

} #end function Get-FileName

$FileName = Get-FileName

$Data = get-content $FileName
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Data)
$EncodedData = [Convert]::ToBase64String($Bytes)
Run Code Online (Sandbox Code Playgroud)

解码脚本:

$Data = get-content $FileName
$Bytes = [System.Text.Encoding]::UTF8.GetBytes($Data)
$EncodedData = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($Bytes))

$EncodedData | Out-File ( $FileName )
Run Code Online (Sandbox Code Playgroud)

powershell base64 encode binaryfiles

19
推荐指数
3
解决办法
3万
查看次数

从二进制文件读取时将big endian转换为little endian

我一直在寻找如何将big-endian转换为little-endians.但我找不到任何可以解决我问题的好处.似乎有很多方法可以进行这种转换.无论如何,以下代码在big-endian系统中正常工作.但是我应该如何编写转换函数,以便它也适用于little-endian系统?

这是一个功课,但它只是一个额外的,因为在学校运行大端系统的系统.这只是我很好奇,并希望它也可以在我的家用电脑上工作

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
   ifstream file;

   file.open("file.bin", ios::in | ios::binary);

   if(!file)
      cerr << "Not able to read" << endl;
   else
   {
      cout << "Opened" << endl;

      int i_var;
      double d_var;

      while(!file.eof())
      {
         file.read( reinterpret_cast<char*>(&i_var) , sizeof(int) );
         file.read( reinterpret_cast<char*>(&d_var) , sizeof(double) );
         cout << i_var << " " << d_var << endl;
      }
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

解决了

所以Big-endian VS Little-endian只是字节的逆序.我写的这个功能似乎无论如何都符合我的目的.我在这里添加它以防万一其他人将来需要它.这只是双倍,但是对于整数,要么使用建议的函数torak,要么可以通过使它仅交换4个字节来修改此代码.

double swap(double d)
{
   double a;
   unsigned char *dst = (unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ binaryfiles endianness

18
推荐指数
2
解决办法
6万
查看次数

python获取unicode字符串大小

我有一个二进制文件.该文件包含UTF-8字符串.此外,保证这个字符串只是一个单词.在python中,如何获得此字符串中的字母数?

比方说,我打开这个文件并读取字节:

bytes = open("1.dat", "rb").read()
Run Code Online (Sandbox Code Playgroud)

接下来我要做些什么来找出UTF-8字符串的长度(字母,而不是字节)?

python binaryfiles utf-8

18
推荐指数
1
解决办法
2万
查看次数