我有一个格式为二进制的.dat文件。此.dat文件包含一个列入黑名单的值,其中显示为true,零为false。用记事本或记事本++打开时,我看不到内部的零和一些。只有奇怪的角色表现出来。
示例:
ù¿.ÿôý½¯ÿËûþÿÅ}ó
但我已经下载了十六进制编辑器,使用该软件我可以看到十六进制值。值是
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。
答案 0 :(得分:3)
听起来你只想将文件作为字节数组读取并反转每个字节的位顺序。
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元素的查找表,然后在处理字节时使用它。