环境解释:
BCB2009
代码目的是读取文件的一部分,最终以16进制的形式选择性的输出到文本框里。
Dtype.Start_Offset在这里是0x44E872
其数据依次如下:
0000CDBFBFBEFF
诡异的地方:
blockA,blockB,blockD,blockE都是正常的,分别被输出为CD BF BE FF
但是blockC却被输出为B0A8BF,百思不得其解……
代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
2 int *blockA = new int;
3 int *blockB = new int;
4 int *blockC = new int;
5 int *blockD = new int;
6 int *blockE = new int;
7 switch (Dtype.Language_Type ) {
8 case 1:
9
10 fseek(fpIn,Dtype.Start_Offset+0x2,0);
11 fread(blockA,1,1,fpIn);
12 fseek(fpIn,Dtype.Start_Offset+0x3,0);
13 fread(blockB,1,1,fpIn);
14 Edit5->Text =AnsiString(IntToHex(*blockA,2))
15 +AnsiString(IntToHex(*blockB,2));
16
17 break;
18 case 2:
19 fseek(fpIn,Dtype.Start_Offset+0x2,0);
20 fread(blockA,1,1,fpIn);
21 fseek(fpIn,Dtype.Start_Offset+0x3,0);
22 fread(blockB,1,1,fpIn);
23 fseek(fpIn,Dtype.Start_Offset+0x4,0);
24 fread(blockC,1,1,fpIn);
25 fseek(fpIn,Dtype.Start_Offset+0x5,0);
26 fread(blockD,1,1,fpIn);
27 fseek(fpIn,Dtype.Start_Offset+0x6,0);
28 fread(blockE,1,1,fpIn);
29 Edit5->Text = AnsiString(IntToHex(*blockA,2))
30 +AnsiString(IntToHex(*blockB,2))
31 +AnsiString(IntToHex(*blockC,2))
32 +AnsiString(IntToHex(*blockD,2))
33 +AnsiString(IntToHex(*blockE,2));
34 ShowMessage(AnsiString(IntToHex(*blockC,2)));
35 break;
36
37 case 3:
38
39 fseek(fpIn,Dtype.Start_Offset+0x2,0);
40 fread(blockA,1,1,fpIn);
41 fseek(fpIn,Dtype.Start_Offset+0x3,0);
42 fread(blockB,1,1,fpIn);
43 Edit5->Text =AnsiString(IntToHex(*blockA,2))
44 +AnsiString(IntToHex(*blockB,2));
45 ShowMessage("Wait");
后来发到CSDN,终于得到了解释:
BCB2009
代码目的是读取文件的一部分,最终以16进制的形式选择性的输出到文本框里。
Dtype.Start_Offset在这里是0x44E872
其数据依次如下:
0000CDBFBFBEFF
诡异的地方:
blockA,blockB,blockD,blockE都是正常的,分别被输出为CD BF BE FF
但是blockC却被输出为B0A8BF,百思不得其解……
代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
2 int *blockA = new int;
3 int *blockB = new int;
4 int *blockC = new int;
5 int *blockD = new int;
6 int *blockE = new int;
7 switch (Dtype.Language_Type ) {
8 case 1:
9
10 fseek(fpIn,Dtype.Start_Offset+0x2,0);
11 fread(blockA,1,1,fpIn);
12 fseek(fpIn,Dtype.Start_Offset+0x3,0);
13 fread(blockB,1,1,fpIn);
14 Edit5->Text =AnsiString(IntToHex(*blockA,2))
15 +AnsiString(IntToHex(*blockB,2));
16
17 break;
18 case 2:
19 fseek(fpIn,Dtype.Start_Offset+0x2,0);
20 fread(blockA,1,1,fpIn);
21 fseek(fpIn,Dtype.Start_Offset+0x3,0);
22 fread(blockB,1,1,fpIn);
23 fseek(fpIn,Dtype.Start_Offset+0x4,0);
24 fread(blockC,1,1,fpIn);
25 fseek(fpIn,Dtype.Start_Offset+0x5,0);
26 fread(blockD,1,1,fpIn);
27 fseek(fpIn,Dtype.Start_Offset+0x6,0);
28 fread(blockE,1,1,fpIn);
29 Edit5->Text = AnsiString(IntToHex(*blockA,2))
30 +AnsiString(IntToHex(*blockB,2))
31 +AnsiString(IntToHex(*blockC,2))
32 +AnsiString(IntToHex(*blockD,2))
33 +AnsiString(IntToHex(*blockE,2));
34 ShowMessage(AnsiString(IntToHex(*blockC,2)));
35 break;
36
37 case 3:
38
39 fseek(fpIn,Dtype.Start_Offset+0x2,0);
40 fread(blockA,1,1,fpIn);
41 fseek(fpIn,Dtype.Start_Offset+0x3,0);
42 fread(blockB,1,1,fpIn);
43 Edit5->Text =AnsiString(IntToHex(*blockA,2))
44 +AnsiString(IntToHex(*blockB,2));
45 ShowMessage("Wait");
后来发到CSDN,终于得到了解释:
int 是 4 字節 , 你只讀了 一個字節進去 。 余下的三個字節是隨機值。
X86 機器 是小端字节序 , 如果你沒填充的那三個字節不是0 , 就出現你現在的情況了。
只讀一下字節的話,用 byte 或 char 來接收就行了。
X86 機器 是小端字节序 , 如果你沒填充的那三個字節不是0 , 就出現你現在的情況了。
只讀一下字節的話,用 byte 或 char 來接收就行了。
——By PPower
原本一直以为new出来的变量都被充分的初始化的,现在看来完全错误了啊……