能力值:
( LV8,RANK:135 )
|
-
-
2 楼
首先这个方法的原型是public static uint ToUInt32 (byte[] value, int startIndex); ,他的功能是返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数 。 C#。
第一个参数是字节数组.
第二个参数是value内的起始位置。
所以ResourcesCount的值就是之前读取到的20个字节长度的数据的第16个字节开始向后读取四个字节,然后转化为32位的无符号整形。
用python代码来表示的话就是这样的,你的这个文件中的数据是大端的还是小段的我就不知道了,如果是大端的话那就把little 换成big 就可以了
ResourcesCount = int.from_bytes(s1, byteorder='little', signed=False)
|
能力值:
( LV7,RANK:105 )
|
-
-
3 楼
lz把读取的文件上传一下,我帮你用python或C++或C#完整写出来
最后于 2018-12-6 08:42
被yegu编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
4 楼
|
能力值:
( LV1,RANK:0 )
|
-
-
5 楼
DickBoomSky
首先这个方法的原型是`public static uint ToUInt32 (byte[] value, int startIndex);`,他的功能是`返回由字节数组中指定位置的四个字节转换来的 ...
首先感谢你的回复 不过我在使用这个方法的时候 发现取到的是一个特别大的数字 请问是数据转换的问题嘛
|
能力值:
( LV1,RANK:0 )
|
-
-
6 楼
感谢 样本已经上传在上面
|
能力值:
( LV8,RANK:135 )
|
-
-
7 楼
VC版本: // fffparser.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
#define SIMPLEFILE "simple.ffff"
struct header
{
char Signature[5];
char version;
char useless[10];
DWORD ResourcesCount;
};
int main()
{
HANDLE hFile = CreateFile(SIMPLEFILE, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Cannot open file!\n");
return 0;
}
header * data = (header *)malloc(sizeof(header));
ZeroMemory(data, 20);
ReadFile(hFile, data, 20, NULL, NULL);
unsigned int ResourcesCount = data->ResourcesCount;
printf("Signature: %c%c%c%c%c\n", data->Signature[0], data->Signature[1], data->Signature[2], data->Signature[3], data->Signature[4]);
printf("Version: %d\n", data->version);
printf("ResourcesCount: %d\n", ResourcesCount); // 我得到的结果是695,和你说的500-600有点不太一样。
CloseHandle(hFile);
return 0;
}
python版本: f = open('simple.ffff', 'rb')
data = f.read(20)
f.close()
Signature = data[:5]
Version = data[5]
useless = data[6:-4]
ResourcesCount = bytes(data[16:])
print(Signature)
print(Version)
print(int.from_bytes(ResourcesCount, "little", signed=False))
我得到的结果都是695,提取到的数据是0xB7020000。怎么转换都是695。
|
能力值:
( LV1,RANK:0 )
|
-
-
8 楼
感谢
|
|
|