【问题标题】:The best way to read binary data from .dat file and reverse a binary value C#从 .dat 文件中读取二进制数据并反转二进制值的最佳方法 C#
【发布时间】:2014-03-05 17:12:51
【问题描述】:

我有一个二进制格式的 .dat 文件。此 .dat 文件包含一个列入黑名单的值,其中显示的值为真,零为假。当用记事本或记事本++打开时,我看不到里面的零和一。只有奇怪的字符显示。

例子:

ù¿.ÿôý½¯ÿËûþÿÅ}ó

但是我已经下载了十六进制编辑器,用那个软件我可以看到十六进制值。值为

F9 BF 7F FF F4 FD BD AF FF CB FB FE FF C5 7D F3

对于每个十六进制值,我需要更改为二进制格式。因此,假设对于 F9,当我们更改为二进制时,它将变为 11111001,而对于 BF,它将变为 10111111等等。

所以在二进制值中,我需要对每个二进制数字进行反转,然后将其保存到数据库中。假设当前值为 11111001,那么我将得到 10011111 和每个二进制数字都将存储到数据库中。与 10111111 等相同。所以在数据库表中,对于 F9 它将变为

id    flag_blacklist  
1         1       
2         0       
3         0       
4         1       
5         1            
6         1
7         1
8         1

继续价值BF它会变成

id    flag_blacklist  
9         1
10        1
11        1
12        1
13        1
14        1
15        0
16        1

直到完成读取 .dat 文件中的所有内容。

流程是十六进制值 > 二进制值 > 反转二进制数 > 存储到数据库

谷歌几个小时后,我仍然没有找到适合我的情况的最佳答案。如果有任何链接可以帮助我解决这个问题或需要更多信息,请告诉我。

已编辑:

.dat 文件的最大大小为 245 KB。

【问题讨论】:

标签: c# binary


【解决方案1】:

听起来您只想将文件作为字节数组读取并反转每个字节的位顺序。

byte[] data = File.ReadAllBytes("file.dat");
for (int i = 0; i < data.Length; i++)
{
    data[i] = ReverseBits(data[i]);
}
// Now write data to the database, however you want to.

ReverseBits 方法可以用“幼稚但相当容易理解”的方式编写为:

private static byte ReverseBits(byte value)
{
    // Just mask out each bit in turn and work out where it should end up.
    return (byte) (((value & 0x01) << 7) |
                   ((value & 0x02) << 5) |
                   ((value & 0x04) << 3) |
                   ((value & 0x08) << 1) |
                   ((value & 0x10) >> 1) |
                   ((value & 0x20) >> 3) |
                   ((value & 0x40) >> 5) |
                   ((value & 0x80) >> 7)));
}

...或者您可以使用这种天真的方式来构建一个 256 元素的查找表,然后在处理字节时使用它。

【讨论】:

  • 是的,我正在寻找,但读取 245kb 大小的 .dat 文件中的所有值需要 1 分钟以上。有什么提高性能的建议吗?
  • @Chuki2: 是否在调试器下?您是否测量过花费了多少时间 1) 读取文件; 2) 反转字节; 3)上传到数据库?我怀疑这几乎都在第三步,除非文件在网络共享上。
  • 哪个文件读取速度快.DAT or .TXT or .APPCONFIG?实际上我想将一个整数变量保存在一个文件中,以便我可以在全局的 asp mvc 应用程序中访问它。
  • @stom:听起来你应该问一个新问题,而且应该比这更清楚很多。为什么你需要一个文件只是为了有一个整数值?不要作为评论回复:阅读codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question后提出一个新问题
猜你喜欢
  • 2015-06-27
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2012-08-01
  • 2012-03-26
  • 2019-04-04
相关资源
最近更新 更多