|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
UINT8 val_a;6 q) }) v# T) R( D) l7 B
UINT16 val_b;
. s$ a. N( T7 a- @/ gUINT8 a[2];
% ?+ @ ]2 z, K/ E- I; n6 Q. OUINT8 b[4];* }, P* n% }/ ~- {5 Y; {
UINT8 s[10]="123456789";* z) A1 L" Q( \7 [
....7 S. Y& E2 m6 ^) E, z
mEMCpy(a,s,2);
( Y' o4 k$ K0 \3 jmemcpy(b,&s[2],4);
" n0 v; D' p: s O- Q" @val_a = stroul(a,0,16); ///字符转化成长整形
; m1 G1 L1 `1 z# |% K/ dval_b = stroul(b,0,16);# ` o8 \0 _, E* q0 T+ d
printf("val_a=0x%02x",(short)val_a);; K+ x2 u- [ B: Z" s
printf("val_b=0x%02x",val_b);
9 N W2 c1 T! t8 M( K P....; ?1 Q) X$ B2 M6 j
1 k% u: B _6 O# S6 P! M' c
理论上应该得到的结果是:. y/ [2 {6 h; ^* Z# N
val_a=0x125 O. F, V+ B9 V# o7 M, g/ T
val_b=0x3456, X; v$ T. O. m4 y
$ w9 i) b2 d) i) I4 Y- Q7 @! r
但是实际得到的结果却是
4 Z9 L% c: P6 m! ^3 W' U5 F* _+ ~val_a=0x560 g1 y8 e. b$ ?$ o2 L! d
val_b=0x3456, `9 s# l' y9 k& Z
6 m% ~" \. y3 N3 ?' M j
* l2 O4 r% {! w% D( n* T- D+ q' B- r
在vc6.0上得出的答案是正确的6 @9 h3 n T1 S
但是在我的8051单片机上得出的结果却是错误答案
! M* H8 n( u* e: A, k* [, p5 _0 C6 n$ a; W, R3 B$ D
但是我将程序如下修改,可以得到正确答案# D/ l5 R( C n
memcpy(a,s,2);7 ~- |- w. A) Q: u- [
val_a = stroul(a,0,16); ///字符转化成长整形/ \/ T! T4 J- F
printf("val_a=0x%02x",(short)val_a);1 ?* x }$ Q" A% U0 W
memcpy(b,&s[2],4);
* b& B# x+ t/ Q% Oval_b = stroul(b,0,16);
& W' V M+ V; M4 p+ I8 Zprintf("val_b=0x%02x",val_b);
6 K U; v) Y2 {4 O, `+ e, N3 n5 W- g: L) F' V
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛% x( I0 t3 C8 ^. P1 B
% i: I5 Z& P) T |
|