作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] C语法转Python
时间Mon Nov 26 21:17:46 2012
※ 引述《blackspace98 (~我爱夏天~)》之铭言:
1F:→ blackspace98:(int(buf[3]<<8)) + (int(buf[4])) 失败XD 11/26 20:38
应该是可以跑吧, 只是出来的结果不对
Python 的 int 范围和 C 不一样(有兴趣的话可以用 sys.maxint 和 minint 看)
而且我没记错的话这个值是 implementation dependent, 不是规范
所以你在把 C 的位元运算转换到 Python 时必须注意这个问题
假设你原本 C 语言的 int 是 16-bit
(说到这个, 你原本那个实作有问题, 因为 int 的范围在各平台不一定一样
在这种状况应该用 intXX_t 系列的型别比较好, 参见
http://goo.gl/15MI5
而且用有号型别做位元运算实在太容易出包了, 建议改用无号)
那麽你必须在左移後把 0x100 以上的位数 mask 掉
例如像这样
int((buf[3] << 8) & 0xffff) + int(buf[4])
才会得到你预期的结果
--
Les grandes et les meilleurs
tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung
by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.81.146
2F:推 blackspace98:谢谢~我是要应用在嵌入式系统的,我会在修看看的^^ 11/26 21:46
3F:推 janice001:那个...c语言的int是要看CPU多少bit就是多少bit吧? 11/27 21:02
4F:推 cobrasgo:印象中int通常就是4byte,long才有差别,印象中XD 11/27 23:55
5F:→ kdjf:K&R: int an integer, typically reflecting the natural 11/28 00:17
6F:→ kdjf:size of integers on the host machine (CPU<=我加的) 11/28 00:19
7F:→ kdjf:差不多是说CPU的adder可以用到的大小,32bit cpu -> 4byte 11/28 00:20
8F:→ kdjf:但是像int有下限: INT_MAX 32767 11/28 00:24
9F:→ kdjf:16byte 11/28 00:25
10F:→ kdjf:16bit... 2byte 11/28 00:25
11F:推 cobrasgo:楼上的定义我个人觉得用在pointer上比较合理 11/30 20:39
12F:→ cobrasgo:不过这种平台相依的东西就case by case了 11/30 20:40