|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
UINT8 val_a;8 k( D! ]9 B; J7 _9 A4 e
UINT16 val_b;5 q3 Z% a! K* D2 K. U% @4 A
UINT8 a[2];$ N: N7 K' {' M$ O( N+ @
UINT8 b[4];
8 s& g0 |& b3 u7 x) s" G- DUINT8 s[10]="123456789";
: |, b+ A, [9 h7 O' |, D" ?0 K....
* n4 @8 E, ~9 o8 h; Y* ~memcpy(a,s,2);
! Z9 p+ m: S4 b* umemcpy(b,&s[2],4);
* J3 D- p/ c# s Pval_a = stroul(a,0,16); ///字符转化成长整形
" k2 \( ]$ i4 E! L+ Bval_b = stroul(b,0,16);# ~5 D: w4 p. U8 D+ `
printf("val_a=0x%02x",(short)val_a);9 i- W4 o; m/ t5 Z2 X8 B
printf("val_b=0x%02x",val_b);% Z8 u+ U. ^# y- W* ]
....
, q7 K, i* ^: P, C3 P% H
) e( ~( G7 |0 H理论上应该得到的结果是:5 \3 P! J. W) ^ W
val_a=0x122 u9 E0 X9 ]* N& G6 G3 w
val_b=0x3456
" U; s& t/ r+ o! K/ Z' k, ?" k; y* I8 [) W
但是实际得到的结果却是6 f( s b: ~, q0 d
val_a=0x56; t; N; m4 s+ A
val_b=0x34565 O$ o$ _) b7 I! Q$ C
1 M& k; I' |7 F9 O. J
! g4 E7 j; E( x# X* E在vc6.0上得出的答案是正确的, S& y- a k2 L
但是在我的8051单片机上得出的结果却是错误答案. P8 ^, } h" x# d5 u: A; \6 \4 y
6 U3 b" ^. L4 R$ S但是我将程序如下修改,可以得到正确答案- c d% L) d1 ~* G4 j6 e
memcpy(a,s,2);- h7 V) {4 ^* t- x/ }4 o& J5 C4 i
val_a = stroul(a,0,16); ///字符转化成长整形' p9 [) d; v" |2 M4 }
printf("val_a=0x%02x",(short)val_a);
* }" H( E8 y3 K7 T Imemcpy(b,&s[2],4);
: C$ f+ o0 s! }) u+ Z! Z( J# D( w' kval_b = stroul(b,0,16);3 X8 R1 A- I/ ~& m, {5 `) ^. R8 g6 L
printf("val_b=0x%02x",val_b);
: k9 L# g- L' T3 v/ W
( L1 o8 X) o5 i0 d l这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛
$ \( P: b8 u) M0 S* G% J$ I% _2 D' r9 k
|
|