|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
UINT8 val_a;* u3 g. @6 G! K9 O. E% q" n
UINT16 val_b;
2 K: f( g) n8 N2 ?) X1 u! [0 NUINT8 a[2];
7 L. v9 J3 J( o' z* x' i' @UINT8 b[4];
$ l$ N! e) @, I8 d2 `6 F* wUINT8 s[10]="123456789";
; ^6 S$ ^4 R# b3 ]' u0 d u....7 w( \* `( C9 l0 V- o8 A
memcpy(a,s,2);
3 V* n& y. {; H/ Z( Q/ t1 N: Mmemcpy(b,&s[2],4);; Y$ M% m N6 p9 ]( h; o
val_a = stroul(a,0,16); ///字符转化成长整形
5 a; z `! s+ f1 r2 @9 _6 Mval_b = stroul(b,0,16);
/ M4 E2 j) h# p8 k: e2 G0 ?" bprintf("val_a=0x%02x",(short)val_a);
0 m. `) x; \* L8 R' ~5 nprintf("val_b=0x%02x",val_b); i8 P5 |/ E6 D
....
# G/ I5 ?4 }. Y7 w/ d! u
5 ~* f) k9 j$ C4 B7 z理论上应该得到的结果是:1 R0 {2 k1 {. Z3 h; r
val_a=0x129 \" }$ F6 r" p7 ?6 ?) z
val_b=0x3456; u# k" G' j, C1 H; }- `
8 P- q1 r* c B. s7 _1 G但是实际得到的结果却是
/ u e7 i" B$ G% A$ xval_a=0x56
6 b. m4 N: Z. S" F5 A2 g ] rval_b=0x3456
; {& D8 J( A( J: A$ k4 @5 \- F9 I9 F& T
& {/ A& D- k) Q& q+ c8 x& s$ ~# g; R( J( F7 m) R0 d
在vc6.0上得出的答案是正确的' h: Z( ?3 z' L" i$ p6 L+ s
但是在我的8051单片机上得出的结果却是错误答案
% Q* s1 l- i$ G) ^4 {' \& E$ Q
9 v+ C0 `4 g5 C5 G4 u E但是我将程序如下修改,可以得到正确答案
4 q! A' f5 @, O: c3 Ymemcpy(a,s,2);
, f. J3 O$ r! M' g+ [) f3 U3 O9 Yval_a = stroul(a,0,16); ///字符转化成长整形( Q3 _$ U, c; W, B" a3 y: n
printf("val_a=0x%02x",(short)val_a);1 [9 [6 e6 ^* d* C. V
memcpy(b,&s[2],4);/ a+ ?. N! [: ?7 g
val_b = stroul(b,0,16);
m& O8 F: X, v- C7 D5 J" v/ I0 uprintf("val_b=0x%02x",val_b);
/ l! p$ [2 c2 ~, v; R' D8 \8 f: h9 q. \ @0 u" ?9 R" M$ p
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛; e A* C4 L8 a! t; @* v5 _& O
, j) \+ e8 f6 \4 e5 `! _* ^. } |
|