|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
UINT8 val_a;* T# ]! \6 T+ ^4 u4 k7 d6 \( B8 v% N- k
UINT16 val_b;
0 K* V. f+ q4 v3 {% q" i4 e- wUINT8 a[2];
* L* o' K5 `! v- y2 I5 s6 LUINT8 b[4];+ r- T# D7 x% g
UINT8 s[10]="123456789";3 u1 _; `, d' G& z0 L8 P8 X) l# K4 k
....+ E3 ^# K0 ?$ H/ }! y! ^0 h
mEMCpy(a,s,2);0 K# G: k* O& J7 c7 C; T* v
memcpy(b,&s[2],4);
1 y( S- ~- ~& g* I! \( D" @0 i3 vval_a = stroul(a,0,16); ///字符转化成长整形5 P5 B: E4 a+ w s' S) @
val_b = stroul(b,0,16);/ o4 h9 X! _$ P. X) U! x- ^3 }
printf("val_a=0x%02x",(short)val_a);: X8 ? Q, _; r
printf("val_b=0x%02x",val_b);! ^% U8 Y& ?2 p3 d- A7 r
....1 a7 l% K# @4 ~' [% _( |6 R
) Y- D4 b7 f6 q ? c& r理论上应该得到的结果是:
* ]* b# b4 ]9 L$ s Fval_a=0x12' N6 i6 E% m: B2 C. o* B
val_b=0x3456
& N, P i7 X' Z+ G7 R! p
q; u# k3 I8 g% r5 I- r6 ?* i但是实际得到的结果却是2 z- `* Q( O p/ I8 m* U5 `
val_a=0x56
9 y0 d2 y5 H, |# Q7 \val_b=0x3456, \ \; K/ y/ v6 x& t F
8 e `9 B9 P6 S( [1 C# Z( ^" Y
/ i1 Z, I3 P+ G! J# d U" P在vc6.0上得出的答案是正确的- E5 Q& z5 b; s* J' q; C; U
但是在我的8051单片机上得出的结果却是错误答案2 c ?; y; S& o; v( m
9 Y+ D5 I+ i; i
但是我将程序如下修改,可以得到正确答案$ _9 X y$ V: ]; l
memcpy(a,s,2);
+ _( y4 H. ^' }/ Oval_a = stroul(a,0,16); ///字符转化成长整形
' s4 S. j, {" {printf("val_a=0x%02x",(short)val_a);
7 z0 z" J# @; w7 [4 Ememcpy(b,&s[2],4);; J! y& a2 x7 @
val_b = stroul(b,0,16);% n" x! K$ e# Y! H8 y/ B+ m# a! J
printf("val_b=0x%02x",val_b);
- ?8 l1 @/ h! ^6 Q5 z \/ \* O5 h4 P' K1 j! O1 F9 |$ ^* f+ _
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛4 J$ s# U2 J. C* y9 |9 L
2 X, R, l! s c |
|