在Powershell/ c#中从整数创建位数组



我正在尝试逆向工程一个游戏数据库,遇到了一个障碍。

我可以加载所有的表/字段/记录,但是当涉及到将记录值转换为十六进制或位时,我卡住了

值(在游戏中)如下:(15位)192 -(10位)20 -(5位)19 -(5位)2

在db文件中,它显示00 C0 - 00 0A - A6 - 00

这很奇怪,因为只有第一个值(00 C0)在十六进制(192)中是相同的

其他值是不同的,我猜这是因为它们不是完整的字节(分别为10和5位),所以它必须使用位数组。

当我将最终值从2更改为31时,进一步证明了这个猜测。数据库中的最后2个值被更改,十六进制字符串变为00 C0 - 00 0A - E6 - 07

那么在PowerShell中把这4个整数放入位数组的最好方法是什么呢?这样我就可以试着确定这里发生了什么?如果对任何有经验的程序员来说都不是很明显,那么这里是什么在起作用。如果需要,我也可以使用c#,但我经验不足。

感谢

我不知道你想达到什么目的。5位的单词实际上是奇数。这里可能没有明确的转换,只有类似哈希的东西。无论如何,从技术上讲,你可以从0数到2^35 - 1,并将其插入游戏并在数据库中查找结果。

让我给你几个转换方法:

To - bit array:

$Bits = 
[convert]::ToString(192, 2).PadLeft(15, '0') +
[convert]::ToString( 20, 2).PadLeft(10, '0') +
[convert]::ToString( 19, 2).PadLeft( 5, '0') +
[convert]::ToString(  2, 2).PadLeft( 5, '0')
$Bits
00000001100000000000101001001100010

和:

if ($Bits -Match '(.{15})(.{10})(.{5})(.{5})') {
$Matches[1..4].Foreach{ [convert]::ToByte($_, 2) }
}
192
20
19
2

Int64:

$Int64 = [convert]::ToInt64($Bits, 2)
$Int64
201347682

字节:

$Bytes = [BitConverter]::GetBytes($Int64)
[System.BitConverter]::ToString($Bytes)
62-52-00-0C-00-00-00-00

注意字节列表的顺序是相反的:

[convert]::ToString(0x62, 2)
1100010

最新更新