标签: binary-data

C#/ .NET - 自定义二进制文件格式 - 从哪里开始?

我需要能够以自定义二进制文件格式存储一些数据.我以前从未设计过自己的文件格式.它需要是一个友好的格式,用于在C#,Java和Ruby/Perl/Python世界之间旅行.

从文件开始将包含记录.GUID字段和JSON/YAML/XML数据包字段.我不确定用什么作为分隔符.逗号,制表符或换行符似乎太脆弱了.Excel做什么?还是XML前的OpenOffice格式?你应该使用ASCII字符0或1.不知道从哪里开始.有关该主题的任何文章或书籍?

该文件格式可以稍后扩展以包括"标题部分".

注意:首先,我将使用.NET,但我希望该格式易于移植.

更新:
"数据包"的处理可能很慢,但文件格式内的导航不能.所以我认为XML不在议事日程中.

.net binary file-format file binary-data

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

克服在DataGridView中显示二进制列的.NET问题

如果DataSet包含时间戳或其他二进制值的列,则在显示该列中的任何数据时,其关联的DataGridView将抛出ArgumentException.也就是说,假设您有一些包含二进制列的表,例如:

CREATE TABLE [dbo].[DataTest](
    [IdStuff] INT IDENTITY(1,1) NOT NULL,
    [ProblemColumn] TIMESTAMP NOT NULL )
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2008中,添加指向可疑表的新数据源.将表从数据源资源管理器拖到新WinForm的可视化设计器表面上,以自动创建DataGridView,BindingSource等.执行应用程序,您将获得运行时异常.听起来像是一个缺陷,对吧?

如果检查DataGridView的Columns集合,您会发现它将列类型设置为DataGridViewImageColumn.为什么?因为,根据微软的说法,.NET假定二进制列是图像.事实上,微软肯定这种行为是设计的!请参阅Microsoft Connect上的此缺陷报告:http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx ?FeedbackID = 93639

可以通过处理DataGridView的DataError事件来抑制错误对话框,正如对话框礼貌地指出的那样,但这引出了问题.我想找到一种方法来避免首先出现错误.也就是说,我希望有一个DataGridViewTextColumn显示二进制数据的文本表示,例如"0x1234a8e9433bb2".我正在寻找一个通用的解决方案,因为我的实际代码不使用上面示例中的特定表.相反,我在dataAdapter.SelectCommand中添加了一些任意的查询,然后调用

dataAdapter.Fill(dataTable)
Run Code Online (Sandbox Code Playgroud)

自动生成我的dataTable.由于DataGridView有(恕我直言)错误,我想我需要检查数据表的列(即dataTable.Columns [n] .DataType.Name.Equals("Byte []")?)并在将dataTable连接到DataGridView之前手动将任何字节数组转换为其文本形式

bindingSource.DataSource = dataTable;
Run Code Online (Sandbox Code Playgroud)

那我的问题是:

是否有更简单或更优雅的方式在DataGridView中显示二进制列?

(请注意,VS 2005和VS 2008,.NET 2.0和.NET 3.5都存在此问题.)

sql-server datagridview binary-data visual-studio-2008

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

StreamReader和二进制数据

我有这个文本文件包含不同的字段.某些字段可能包含二进制数据.我需要获取文件中的所有数据,但是现在使用StreamReader时它不会读取二进制数据块和数据之后的内容.什么是解决这个问题的最佳解决方案?

例:

field1|field2|some binary data here|field3
Run Code Online (Sandbox Code Playgroud)

现在我在文件中读到这样的:

public static string _fileToBuffer(string Filename)
{
    if (!File.Exists(Filename)) throw new ArgumentNullException(Filename, "Template file does not exist");

    StreamReader reader = new StreamReader(Filename, Encoding.Default, true);
    string fileBuffer = reader.ReadToEnd();
    reader.Close();

    return fileBuffer;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道二进制字段的开始和结束位置.

.net c# binary-data streamreader

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

如何检查文件是否是纯文本?

在我的程序中,用户可以加载带有链接的文件(它是一个webcrawler),但是我需要验证用户选择的文件是纯文本还是其他东西(只允许纯文本).

有可能这样做吗?如果有用,我正在使用JFileChooser打开文件.

编辑:

用户期望的是:包含URL的文本文件.

我想避免的:用户从MS Word加载MP3文件或文档(示例).

java text binary-data

6
推荐指数
1
解决办法
9577
查看次数

插入器和提取器读/写二进制数据与文本

我一直试图阅读iostream并更好地理解它们.偶尔我发现它强调inserters(<<)和extractors(>>)意味着在文本序列化中使用.这是一些地方,但这篇文章是一个很好的例子:

http://spec.winprog.org/streams/

<iostream>宇宙之外,有些情况下<<和>>以类似流的方式使用但不遵守任何文本约定.例如,他们在Qt使用时编写二进制编码数据QDataStream:

http://doc.qt.nokia.com/latest/qdatastream.html#details

在语言层面,<<和>>运算符属于你的项目要重载(因此QDataStream的作用显然是可以接受的).我的问题是那些使用<iostream><<和>>运算符来实现二进制编码和解码的人是否被认为是一种不好的做法.是否(例如)有任何期望,如果写入磁盘上的文件,该文件应该可以使用文本编辑器查看和编辑?

如果一个总是使用其他方法名称和基地他们read()write()?或者文本编码应该仅仅被视为默认行为,与标准库iostream集成的类可以选择忽略?


更新关于此的一个关键术语问题似乎是"格式化"与"未格式化"的I/O的区别(与术语"文本"与"二进制"相对).我发现了这个问题:

将二进制数据(std :: string)写入std :: ofstream?

来自@ TomalakGeret'kal的评论说:"我不想使用<<用于二进制数据,因为我的大脑将其视为"格式化输出",这不是你正在做的事情.再次,它完全有效,但我不会那样混淆我的大脑."

这个问题的公认答案说只要你使用就可以了ios::binary.这似乎支持了辩论的"它没有任何问题"...但我仍然没有看到任何权威来源的问题.

c++ text iostream binary-data

6
推荐指数
1
解决办法
1138
查看次数

在gnuplot上查看来自fortran的二进制输出

所以,我用fortran创建了一个二进制文件,使用类似的东西:

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

我理解它的方式,fortran在文件的两端填充4个字节的文件,其余的只是我想要的数据(在这种情况下,1000个双打的列表).

我想用gnuplot读取这个,但是,我不知道如何让gnuplot跳过第一个和最后4个字节,并将其余部分读作双打.在这方面,文档不是很有用.

谢谢

fortran binaryfiles gnuplot binary-data

6
推荐指数
3
解决办法
5084
查看次数

如何读取二进制数据并转换为unsigned char(C++)

我有一个以二进制数据保存的原始图像文件(无编码).我想读取文件并将值转换为unsigned char.但我不知道如何开始这样做.每个文件包含640x480字节.每个像素是8位.

我在这里使用了C++帮助页面:http://www.cplusplus.com/doc/tutorial/files/,但是当我在宣传数据时,它似乎显示了相同的二进制/非人类可读字符.有人可以建议吗?到目前为止,这是我的代码:

    #include <iostream>
    #include <fstream>
    using namespace std;

ifstream::pos_type size;
char * memblock;

int main () {
  ifstream file ("imageData.raw", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);

    cout << "the complete file content is in memory";

    for (int l=0; l<size; l++){
    cout << " memblock[] is = " << (unsigned char)memblock[l] << " index was l = " << l << endl;
    }

    file.close();


    delete[] …
Run Code Online (Sandbox Code Playgroud)

c++ binary-data unsigned-char

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

cURL中的data-binary参数

我必须通过php中的cURL发送data-binary参数.
这是命令:curl -D - -u user:password -X PUT -H "Content-Type: text/plain" --data-binary "data-id=2010-10-01_15-15-53" https://someurl.在控制台这工作,现在我必须在PHP中.

这是我的代码:

    $this->_curl = curl_init();
    curl_setopt($this->_curl, CURLOPT_USERPWD, $this->_loginUser . ":" . $this->_loginPassword);
    curl_setopt($this->_curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($this->_curl, CURLOPT_HEADER, 1);
    curl_setopt($this->_curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($this->_curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($this->_curl, CURLOPT_URL, $this->_serviceUrl);//https://someurl
    curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
    curl_setopt($this->_curl, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($this->_curl, CURLOPT_POSTFIELDS, array('data-id' => $dataId));//d'2010-10-01_15-15-53'

    $response = curl_exec($this->_curl);
    //$response = HTTP/1.1 201 Created
    curl_close($this->_curl);
Run Code Online (Sandbox Code Playgroud)

该调用被服务器接受,但它无法识别data-id参数:

触发器2010-10-01_15-15-53中未定义data-id属性

知道我错过了什么吗?

php curl binary-data

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

从Julia中的二进制文件中读取4字节的单词

我有一个简单的二进制文件,包含彼此相邻的32位浮点数.

使用Julia,我想读取每个数字(即每个32位字)并将它们按顺序放入Float32格式数组中.

我通过查看文档尝试了一些不同的东西,但都产生了不可能的值(我使用的是具有已知值的二进制文件作为虚拟输入).看起来:

  1. Julia一次只读取一个字节的二进制文件.

  2. Julia将每个字节放入一个Uint8数组中.

例如,readbytes(f, 4)给出一个4元素的无符号8位整数数组.read(f, Float32, DIM)也给出了奇怪的价值.

任何人都知道我该怎么办?

file-io binaryfiles binary-data julia

6
推荐指数
3
解决办法
3489
查看次数

字面意思是将二进制数据写入文件

我有一个整数数组

Array
(
    [0] => Array
        (
            [0] => 1531412763
            [1] => 1439959339
            [2] => 76
            [3] => 122
            [4] => 200
            [5] => 4550
            [6] => 444
        )
...
Run Code Online (Sandbox Code Playgroud)

依此类推,我想如果我把它看作是一个数据库 - 最外层数组的元素是行,内部数组的元素是列.

我想将该信息保存到文件中,以便稍后我可以检索它,但我想将其保存为二进制数据以节省空间.基本上,如果我将示例中的第一个整数写入1531412763文件,它将占用10个字节,但如果我可以将其保存为有符号整数,则需要占用4个字节.

我已经看了一些其他的答案,这些答案都建议使用fwrite哪些我无法理解如何以这种方式使用?

php filesystems binaryfiles binary-data

6
推荐指数
1
解决办法
9707
查看次数