找回密码
 注册
关于网站域名变更的通知
查看: 1131|回复: 7
打印 上一主题 下一主题

copy数据出现覆盖,神马问题?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-9-13 18:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
UINT8    val_a;+ x0 z' ?: p5 M9 T$ B
UINT16  val_b;
2 [  ^* R$ m( j" qUINT8   a[2];
4 w# H) P/ ~, Z( M) I1 ?UINT8   b[4];$ b  `1 M: Y4 ?. \9 K
UINT8   s[10]="123456789";. i2 y/ `% L! F3 ?' }/ M
....- F7 N0 s8 N+ B8 I: }
mEMCpy(a,s,2);& x2 i; z# M1 K. L
memcpy(b,&s[2],4);
0 u. a+ k2 |# `* F/ \val_a = stroul(a,0,16);  ///字符转化成长整形
2 H" P  `. I; R* |, _4 I  Kval_b = stroul(b,0,16);
" D: }( }9 v" d8 v  b6 s! Nprintf("val_a=0x%02x",(short)val_a);* ?" N* H$ a7 n) u
printf("val_b=0x%02x",val_b);! B) b6 B0 ?8 A3 |: O1 t4 R5 Y: }
....: Q. P3 W$ t" L- s1 b* |

5 m* p7 E6 j# F1 ~. i2 _/ L理论上应该得到的结果是:
6 M. U1 ~6 \$ \. ?' L0 T' Mval_a=0x12* D6 x7 r3 Q4 i3 t
val_b=0x3456
& f7 F4 R- }7 ~* i/ P( M* w
. l# c0 Y% u, E( \/ }  U4 s+ C但是实际得到的结果却是
3 k' t$ O# J! x/ mval_a=0x56  J7 s8 h* T7 E. V
val_b=0x3456
, d" \. s$ ^" B
% H: U1 {/ P+ r2 u9 A: G) s0 T  A$ t/ c( X) _3 I' a
在vc6.0上得出的答案是正确的
3 A3 I) C2 l$ {: R" ~2 p2 D但是在我的8051单片机上得出的结果却是错误答案8 T5 H, k7 i4 P, n8 W9 O1 ^5 V- I8 k

% N+ x  j: d9 \1 \% G1 j2 z# P但是我将程序如下修改,可以得到正确答案  K" h6 j: W; D: g
memcpy(a,s,2);
. q2 p3 c* H; A# m# A# l% C( g* zval_a = stroul(a,0,16);  ///字符转化成长整形
: E! |/ U: J6 Zprintf("val_a=0x%02x",(short)val_a);
) ^8 \% y) Z2 |" v# U! g2 J$ {0 Gmemcpy(b,&s[2],4);
; m' c" D; R& O' Aval_b = stroul(b,0,16);
2 p9 h$ L2 D) n9 B6 j4 Tprintf("val_b=0x%02x",val_b);
8 X4 ~9 i1 Z) i% t& ]& x
- N7 g$ n" f1 g$ C  ]3 L' J- `! Y- @这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛
# S! E% f% \* J' \# }% ?; l
9 D$ b( O% [1 B; d% B& T9 b

该用户从未签到

2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char
1 t' E# v5 s9 D! ?+ Y4 DUINT16是unsigned char short

该用户从未签到

3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?$ t7 O/ f* r. C- s# I& a4 d" e$ q
uint8 a[2]; 改成 uint8 a[3] = {0};
" ]' u% q, T$ P) X8 x1 p0 [$ Zuint8 b[4]; 改成 uint8 b[5] = {0};" _3 ]- k0 B. Q7 Y2 z
字符串应该以0结束。

该用户从未签到

4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12
! z. `. g$ v& v( Zstroul函数,我没有查到,是将字符串转成长整形吗?
- U8 N7 L$ b4 ?7 w+ E3 @1 Ruint8 a[2]; 改成 uint8 a[3] = {0};8 v. L: \& J: ^0 U& \
uint8 b[4]; 改 ...

4 r& o. ^( p* b; U还是一样错误,val_a错误

该用户从未签到

5#
发表于 2013-10-9 22:03 | 只看该作者
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。

该用户从未签到

6#
 楼主| 发表于 2013-10-10 08:51 | 只看该作者
ArthurGXH 发表于 2013-10-9 22:03
: z! ]8 h: _9 K4 \5 {" i0 L7 j把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。

: ?# j3 F; {4 D2 }5 r: _0 X这是库函数,转换数据类型的,你百科下就知道了

该用户从未签到

7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑 # x! _; p6 n$ E0 t

. \6 B; [7 {+ N2 O! D  z楼主的函数写错了,应该是strtol。
4 t6 g) j2 |0 E5 R6 u# {2 i) F4 f楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}”。这个程序我试过,按我说的改就没问题。原因太简单,在3楼已经解释了,你仔细想想。

该用户从未签到

8#
 楼主| 发表于 2013-10-11 13:00 | 只看该作者
ArthurGXH 发表于 2013-10-10 14:32
2 ]) R; d- F9 B! S& D% ^  n2 I楼主的函数写错了,应该是strtol。" A# U2 d( f7 }. F! m6 p
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...
$ T7 i3 X( F8 J
& j- {" C( b5 H5 j- `# c
ab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解* W! p1 S6 m# Y" q9 v0 K

% z$ I; F6 z( l* B恩,查了下:
: K& a, J! }, H( Rstrtoul(将字符串转换成无符号长整型数)
4 i: R# W: ^0 wstrtol    (将参数nptr字符串根据参数base来转换成长整型数)( B5 \4 |; ~0 r0 u' h. x0 ~8 \
9 J' {' }* ~" e3 D0 j
功能差不多,上面是转换成无符号整形,故有个u
9 w. V/ u8 h3 H5 O5 {
5 g+ ^% `1 ^! s+ r/ W$ v3 Z& N; w" z" N' A5 u8 n" f
, C* t4 U: p- g  L$ {" Y) U
4 f8 R- n; g+ C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-4 23:52 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表