非正式地,我们大多数人都知道存在"二进制"文件(目标文件,图像,电影,可执行文件,专有文档格式等)和"文本"文件(源代码,XML文件,HTML文件,电子邮件等).
通常,您需要知道文件的内容才能对其执行任何有用的操作,并且如果编码是"二进制"或"文本",则形成该视点,这并不重要.当然,文件只存储数据字节,因此它们都是"二进制",而"文本"并不意味着什么,而不知道编码.然而,谈论'二进制'和'文本'文件仍然很有用,但为了避免冒犯任何具有这种不精确定义的人,我将继续使用'恐慌'报价.
但是,有各种工具可以处理各种文件,实际上,您希望根据文件是"文本"还是"二进制"来执行不同的操作.这方面的一个例子是在控制台上输出数据的任何工具.简单的"文本"看起来很好,很有用.'二进制'数据会扰乱您的终端,并且通常无法查看.GNU grep在确定是否应该输出匹配到控制台时至少使用这种区别.
那么,问题是,如何判断文件是"文本"还是"二进制"?而且要进一步限制,你如何在类似Linux的文件系统上讲述?我不知道任何文件系统元数据指示文件的"类型",所以通过检查文件的内容,我如何判断它是"文本"还是"二进制"?为简单起见,我们将"text"限制为可在用户控制台上打印的字符.特别是你会如何实现这个?(我认为这是暗示在这个网站上,但我想一般来说,指向现有的代码,这应该是有用的,我应该指定),我不是真的在我可以使用的现有程序之后做什么这个.
我正在尝试使用C#读取二进制数据.我有关于我想要阅读的文件中数据布局的所有信息.我能够读取数据"chunk by chunk",即获取前40个字节的数据将其转换为字符串,获得接下来的40个字节.
由于至少有三种略有不同的数据版本,我想将数据直接读入结构中.它只是通过"逐行"阅读它而感觉更加正确.
我尝试了以下方法但无济于事:
StructType aStruct;
int count = Marshal.SizeOf(typeof(StructType));
byte[] readBuffer = new byte[count];
BinaryReader reader = new BinaryReader(stream);
readBuffer = reader.ReadBytes(count);
GCHandle handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
aStruct = (StructType) Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(StructType));
handle.Free();
Run Code Online (Sandbox Code Playgroud)
该流是一个打开的FileStream,我已经开始从中读取.我AccessViolationExceptio在使用时得到了一个Marshal.PtrToStructure.
由于我对文件末尾的数据不感兴趣,因此该流包含的信息比我尝试阅读的要多.
结构定义如下:
[StructLayout(LayoutKind.Explicit)]
struct StructType
{
[FieldOffset(0)]
public string FileDate;
[FieldOffset(8)]
public string FileTime;
[FieldOffset(16)]
public int Id1;
[FieldOffset(20)]
public string Id2;
}
Run Code Online (Sandbox Code Playgroud)
示例代码从原始代码更改为使此问题更短.
如何将二进制数据从文件读入结构?
我怎么知道文件是否是二进制文件?
例如,编译的c文件.
我想从某个目录中读取所有文件,但我想忽略二进制文件.
我正在寻找一种方法来检查我是否已经到达我的二进制阅读器的文件的末尾,并且一个建议是使用PeekChar这样
while (inFile.PeekChar() > 0)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是,看起来我遇到了一个问题
Unhandled Exception: System.ArgumentException: The output char buffer is too sma ll to contain the decoded characters, encoding 'Unicode (UTF-8)' fallback 'Syste m.Text.DecoderReplacementFallback'. Parameter name: chars at System.Text.Encoding.ThrowCharsOverflow() at System.Text.Encoding.ThrowCharsOverflow(DecoderNLS decoder, Boolean nothin gDecoded) at System.Text.UTF8Encoding.GetChars(Byte* bytes, Int32 byteCount, Char* char s, Int32 charCount, DecoderNLS baseDecoder) at System.Text.DecoderNLS.GetChars(Byte* bytes, Int32 byteCount, Char* chars, Int32 charCount, Boolean flush) at System.Text.DecoderNLS.GetChars(Byte[] bytes, Int32 byteIndex, Int32 byteC ount, Char[] chars, Int32 charIndex, Boolean flush) at …
我有一些代码有\ x00和\ x04 十六进制代码,这意味着什么?
$str= implode("\x00", $var['message']); //line 1
$id= $var['message'] . "\x04" . $id; //line 2
Run Code Online (Sandbox Code Playgroud)
line1和line2会发生什么我想把它们作为二进制格式写入外部文件.
我在哪里可以获得这样的所有信息.
我们正在评估我们将用于存储我们在分析C/C++代码期间收集的数据的技术.在C++的情况下,数据量可能相对较大,每TU约20Mb.
阅读以下SO 答案后,我认为HDF5可能是我们使用的合适技术.我想知道这里的人是否可以帮我回答一些我提出的初步问题:
性能.数据的一般用法是一次写入并读"几次",类似于编译器生成的'.o'文件的生命周期.HDF5如何与使用像SQLite DB这样的东西进行比较?这甚至是一个合理的比较吗?
随着时间的推移,我们将添加我们正在存储的信息,但不一定要重新分发一组全新的"读者"以支持新格式.在阅读用户指南后,我了解到HDF5与XML或DB类似,因为信息与标签/列相关联,因此构建用于读取旧结构的工具只会忽略它不关心的字段?我对此的理解是否正确?
我们希望写出的一大部分信息将是树类型的结构:范围层次结构,类型层次结构等.理想情况下,我们会将范围建模为具有父项,子项等.是否可以将一个HDF5对象设为"点"到另一个?如果没有,是否有使用HDF5解决此问题的标准技术?或者,根据数据库的要求,我们是否需要一个唯一的密钥,在搜索数据时,将一个对象"链接"到另一个对象并进行适当的查找?
非常感谢!
我们为什么要在传输时区分文本文件和二进制文件?为什么有些频道只针对文字数据设计?在底层,它们都是位.
假设我主要是Linux用户,但我正在Go中开发一个我想要跨平台的应用程序.我四处寻找,但我似乎无法找到解释以下内容的信息:
go install是amd64 Ubuntu系统上的二进制文件,它是否也可以在其他任何人的 64位Ubuntu/Debian系统上运行?go install构建一个x86_64二进制文件,它也可以在32位Debianlikes上运行开箱即用?我的问题实际归结为"静态/可移植是怎样的链接器/编译器?"
我有一个字节序列,我必须使用Java在一组二进制文件中搜索.
示例:我正在DEADBEEF二进制文件中搜索字节序列(十六进制).我将如何在Java中执行此操作?是否有内置方法,如String.contains()二进制文件?
binaryfiles ×10
c# ×2
unix ×2
ascii ×1
binaryreader ×1
byte ×1
database ×1
datamodel ×1
file-format ×1
file-type ×1
git ×1
go ×1
hdf5 ×1
io ×1
java ×1
php ×1
search ×1
shell ×1
struct ×1
text-files ×1