﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-colorful-随笔分类-跨平台</title><link>http://www.cppblog.com/colorful/category/19324.html</link><description>zc qq:1337220912</description><language>zh-cn</language><lastBuildDate>Tue, 15 May 2012 09:17:17 GMT</lastBuildDate><pubDate>Tue, 15 May 2012 09:17:17 GMT</pubDate><ttl>60</ttl><item><title>关于跨平台数据类型的几篇博文 有些矛盾</title><link>http://www.cppblog.com/colorful/archive/2012/05/15/174987.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Tue, 15 May 2012 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2012/05/15/174987.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/174987.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2012/05/15/174987.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/174987.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/174987.html</trackback:ping><description><![CDATA[<div><div><h1><a id="viewpost1_TitleUrl" href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html">c++ 中关于int，unsigned int , short的跨平台移植</a></h1> 	<div> 		<div> 			int类型比较特殊，具体的字节数同机器字长和编译器有关。如果要保证移植性，尽量用__int16 __int32 __int64吧<br />__int16、__int32这种数据类型在所有平台下都分配相同的字节。所以在移植上不存在问题。<br /><span style="color: red">所谓的不可移植是指：在一个平台上编写的代码无法拿到另一个平台上运行时，不能达到期望的运行结果</span>。<br />例如：在32为平台上（所谓32位平台是指通用寄存器的数据宽度是32）编写代码，int 类型分配4个字节，而在16位平台是则分配2个字节，那么在16位上编译出来的exe，<br />其中是为int分配2字节，而在32位平台上运行时，会按照4个字节来解析，显然会出错误的！！<br /><br />而对于非int行，目前为止，所有的类型分配的字节数都是兼容的，即不同平台对于同一个类型分配相同的字节数！！<br /><br /><span style="color: red">建议：在代码中尽量避免使用int类型，根据不同的需要可以用short,long,unsigned int 等代替。<br /></span><br />下面是各个类型一览表【转】<br /><p>64位指的是cpu通用寄存器的数据宽度是64位的。</p><table style="width: 578px; border-collapse: collapse; height: 550px" border="0" cellpadding="0" cellspacing="0"><tbody><tr style="height: 12.75pt" height="17"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext 2pt double; border-left: windowtext 2pt double; width: 85pt; border-bottom: windowtext 0.5pt solid; height: 12.75pt; background-color: silver" height="17" width="113"><strong>数据类型名称</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext 2pt double; border-left: windowtext; width: 41pt; border-bottom: windowtext 0.5pt solid; background-color: silver" width="54"><strong>字节数</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext 2pt double; border-left: windowtext; width: 190pt; border-bottom: windowtext 0.5pt solid; background-color: silver" width="253"><strong>别名</strong></td><td style="border-right: windowtext 2pt double; border-top: windowtext 2pt double; border-left: windowtext; width: 328pt; border-bottom: windowtext 0.5pt solid; background-color: silver" width="437"><strong>取值范围</strong></td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>int</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">*</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">signed,signed int</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">由<a href="http://dev.21tx.com/os/" target="_blank"><u>操作系统</u></a>决定，即与操作系统的＂字长＂有关</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>unsigned int</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">*</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">unsigned</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">由操作系统决定，即与操作系统的＂字长＂有关</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>__int8</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">1</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">char,signed char</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;128 到 127</td></tr><tr style="height: 12.75pt" height="17"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12.75pt; background-color: #99ccff" height="17"><strong>__int16</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">2</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">short,short int,signed short int</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;32,768 到 32,767</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>__int32</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">4</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">signed,signed int</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;2,147,483,648 到 2,147,483,647</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>__int64</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">8</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">无</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;9,223,372,036,854,775,808 到 9,223,372,036,854,775,807</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>bool</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">1</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">无</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">false 或 true</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>char</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">1</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">signed char</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;128 到 127</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>unsigned char</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">1</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">无</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">0 到 255</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>short</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">2</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">short int,signed short int</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;32,768 到 32,767</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>unsigned short</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">2</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">unsigned short int</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">0 到 65,535</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>long</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">4</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">long int,signed long int</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;2,147,483,648 到 2,147,483,647</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>long long</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">8</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">none (but equivalent to __int64)</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">&#8211;9,223,372,036,854,775,808 到 9,223,372,036,854,775,807</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>unsigned long</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">4</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">unsigned long int</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">0 到 4,294,967,295</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>enum</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">*</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">无</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">由操作系统决定，即与操作系统的＂字长＂有关</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>float</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">4</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">无</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">3.4E +/- 38 (7 digits)</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>double</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">8</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">无</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">1.7E +/- 308 (15 digits)</td></tr><tr style="height: 12pt" height="16"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 0.5pt solid; height: 12pt; background-color: #99ccff" height="16"><strong>long double</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">8</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">无</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 0.5pt solid; background-color: transparent">1.7E +/- 308 (15 digits)</td></tr><tr style="height: 12.75pt" height="17"><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext 2pt double; border-bottom: windowtext 2pt double; height: 12.75pt; background-color: #99ccff" height="17"><strong>wchar_t</strong></td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 2pt double; background-color: transparent">2</td><td style="border-right: windowtext 0.5pt solid; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 2pt double; background-color: transparent">__wchar_t</td><td style="border-right: windowtext 2pt double; border-top: windowtext; border-left: windowtext; border-bottom: windowtext 2pt double; background-color: transparent">0 到 65,535</td></tr></tbody></table><table border="1" height="273" width="100%"><tbody><tr><td height="19" width="22%">类型标识符</td><td height="19" width="19%">类型说明</td><td height="19" width="10%">长度<br />（字节）</td><td height="19" width="29%">范围</td><td height="19" width="20%">备注</td></tr><tr><td height="18" width="22%"><strong>char</strong></td><td height="18" width="19%">字符型</td><td height="18" width="10%">1</td><td height="18" width="29%">-128 ~ 127</td><td height="18" width="20%">-2<sup>7</sup> ~ (2<sup>7</sup> -1)</td></tr><tr><td height="19" width="22%"><strong>unsigned char</strong></td><td height="19" width="19%">无符字符型</td><td height="19" width="10%">1</td><td height="19" width="29%">0 ~ 255</td><td height="19" width="20%">0 ~ (2<sup>8</sup> -1)</td></tr><tr><td height="18" width="22%"><strong>short int</strong></td><td height="18" width="19%">短整型</td><td height="18" width="10%">2</td><td height="18" width="29%">-32768 ~ 32767</td><td height="18" width="20%">2<sup>-15</sup> ~ (2<sup>15</sup> - 1)</td></tr><tr><td height="19" width="22%"><strong>unsigned short int</strong></td><td height="19" width="19%">无符短整型</td><td height="19" width="10%">2</td><td height="19" width="29%">0 ~ 65535</td><td height="19" width="20%">0 ~ (2<sup>16</sup> - 1)</td></tr><tr><td height="19" width="22%"><strong>int</strong></td><td height="19" width="19%">整型</td><td height="19" width="10%">4</td><td height="19" width="29%">-2147483648 ~ 2147483647</td><td height="19" width="20%">-2<sup>31</sup> ~ (2<sup>31</sup> - 1)</td></tr><tr><td height="19" width="22%"><strong>unsigned int</strong></td><td height="19" width="19%">无符整型</td><td height="19" width="10%">4</td><td height="19" width="29%">0 ~ 4294967295</td><td height="19" width="20%">0 ~ (2<sup>32</sup>-1)</td></tr><tr><td height="19" width="22%"><strong>float</strong></td><td height="19" width="19%">实型（单精度）</td><td height="19" width="10%">4</td><td height="19" width="29%">1.18*10<sup>-38</sup> ~ 3.40*10<sup>38</sup></td><td height="19" width="20%">7位有效位</td></tr><tr><td height="19" width="22%"><strong>double</strong></td><td height="19" width="19%">实型（双精度）</td><td height="19" width="10%">8</td><td height="19" width="29%">2.23*10<sup>-308 </sup>~ 1.79*10<sup>308</sup></td><td height="19" width="20%">15位有效位</td></tr><tr><td height="19" width="22%"><strong>long double</strong></td><td height="19" width="19%">实型（长双精度）</td><td height="19" width="10%">10</td><td height="19" width="29%">3.37*10<sup>-4932</sup> ~ 1.18*10<sup>4932</sup></td><td height="19" width="20%">19位有效位<br /></td></tr></tbody></table><br /><br /> 		</div> 		<div> 			发表于 2011-04-15 14:02 <a href="http://www.cppblog.com/lapcca/">阿&#960;</a> 阅读(1812) <a href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#Post">评论(4)</a> &nbsp;<a href="http://www.cppblog.com/lapcca/admin/EditPosts.aspx?postid=144302">编辑</a>&nbsp;<a href="http://www.cppblog.com/lapcca/AddToFavorite.aspx?id=144302">收藏</a> <a href="http://www.cppblog.com/lapcca/services/trackbacks/144302.aspx">引用</a>  所属分类: <a href="http://www.cppblog.com/lapcca/category/13742.html">其它</a>  		</div> 	</div> 	<div>&nbsp;</div> 	<img src="http://www.cppblog.com/lapcca/aggbug/144302.html?webview=1" height="1" width="1"  alt="" /> 	      	         <a name="pagedcomment"></a> <div> <a name="评论"> </a><div><a name="评论"> 	<div> 		评论 	</div> 	 	 			</a><div><a name="评论"> 		 			</a><div><a name="评论"> 				</a><div><a name="评论"> 					</a><a title="permalink: re: c++ 中关于int，unsigned int , short的跨平台移植" href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#144314">#</a>&nbsp;<a name="144314"></a>re: c++ 中关于int，unsigned int , short的跨平台移植 				</div> 				<div>C99应该用int**_t</div> 				<div><a id="AjaxHolder_Comments_CommentList_ctl01_NameLink" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 评论于 2011-04-15 16:14&nbsp;&nbsp;<a href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#post">回复</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cppblog.com/comment?author=%e7%a9%ba%e6%98%8e%e6%b5%81%e8%bd%ac" target="_blank">更多评论</a>&nbsp;&nbsp;&nbsp;&nbsp;</div> 			</div> 		 			<div> 				<div> 					<a title="permalink: re: c++ 中关于int，unsigned int , short的跨平台移植" href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#144338">#</a>&nbsp;<a name="144338"></a>re: c++ 中关于int，unsigned int , short的跨平台移植 				</div> 				<div>我也做过移植. <br />影响中16位平台，多用C来开来，多是嵌入式开发. <br />32、64位在PC、服务器级较多，目前16位已很少. <br />我个人认为int型相于对long类型要安全. <br />long类型在windows－64下，仍是32字节； <br />但在LINUX－64下long和指针是相当的，已升级到了64字节， <br />如果结构体中使用long，结果大小有变，windows64下做的资源在linux下64处理，会有问题， <br />最常见的资源头大小就一致. <br />如果是大型项目，还是建立自己的一套低层基本数据类型封装方为上策.</div> 				<div><a id="AjaxHolder_Comments_CommentList_ctl02_NameLink" href="http://www.cppblog.com/bbxyard/" target="_blank">bbxyard</a> 评论于 2011-04-15 23:33&nbsp;&nbsp;<a href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#post">回复</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cppblog.com/comment?author=bbxyard" target="_blank">更多评论</a>&nbsp;&nbsp;&nbsp;&nbsp;</div> 			</div> 		 			<div> 				<div> 					<a title="permalink: re: c++ 中关于int，unsigned int , short的跨平台移植[未登录]" href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#144366">#</a>&nbsp;<a name="144366"></a>re: c++ 中关于int，unsigned int , short的跨平台移植[未登录] 				</div> 				<div>lz说的不对，应该用int8_t, int16_t,int32_t, int64_t, uintXX_t 等等。而以两个下划线开头的那种类型是微软自己的东西，是不可以移植的。</div> 				<div><a id="AjaxHolder_Comments_CommentList_ctl03_NameLink" href="http://home.cnblogs.com/u/292522/" target="_blank">Alex</a> 评论于 2011-04-16 23:52&nbsp;&nbsp;<a href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#post">回复</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cppblog.com/comment?author=Alex" target="_blank">更多评论</a>&nbsp;&nbsp;&nbsp;&nbsp;</div> 			</div> 		 			<div> 				<div> 					<a title="permalink: re: c++ 中关于int，unsigned int , short的跨平台移植" href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#155386">#</a>&nbsp;<a name="155386"></a>re: c++ 中关于int，unsigned int , short的跨平台移植<a name="Post"></a> 				</div> 				<div>原来这么复杂啊，分析的好详细，顶！</div> 				<div><a id="AjaxHolder_Comments_CommentList_ctl04_NameLink" href="http://isafesoft.com" target="_blank">free keylogger</a> 评论于 2011-09-08 22:46&nbsp;&nbsp;<a href="http://www.cppblog.com/lapcca/archive/2011/04/15/144302.html#post">回复</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cppblog.com/comment?author=free+keylogger" target="_blank">更多评论</a>&nbsp;&nbsp;&nbsp;&nbsp;</div> 			</div> 		 			</div> 		 </div> </div> <div>&nbsp;<br /><br />============================================================<br /><div><div> 	      <div> 	      	<div> 		      <h3>C/C++ 32位机器和64位机器 差异问题总结 跨平台 移植问题 语言编程需要注意的64位和32机器的区别&nbsp;&nbsp;</h3> 		      <p clearfix="" nbw-act=""  fc06"="" style="line-height:20px;"> 		        <span> 		           		          2011-09-28 22:39:45|&nbsp;&nbsp;分类： 		          <a m2a"="" href="http://icivelee.blog.163.com/blog/#m=0&amp;t=1&amp;c=fks_084064086082083071083083085095085082086066093094095064086" title="C++">C++</a> 		          <span id="$_blogTagTitle">|&nbsp;&nbsp;标签：</span><span id="$_blogTagInfo"><a href="http://icivelee.blog.163.com/blog/#m=0&amp;t=3&amp;c=c++"  m2a"="">c++</a>&nbsp;&nbsp;<a href="http://icivelee.blog.163.com/blog/#m=0&amp;t=3&amp;c=64%E4%BD%8D%E6%9C%BA"  m2a"="">64位机</a>&nbsp;&nbsp;<a href="http://icivelee.blog.163.com/blog/#m=0&amp;t=3&amp;c=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"  m2a"="">数据类型</a>&nbsp;&nbsp;</span> 		        </span> 		        <span fc07=""  ztag"="">|<span fc03"="" id="$_fontswitch">字号</span></span><span pnt=""  fc03"="" id="$_blog_subscribe">&nbsp;<a>订阅</a></span> 		      </p> 		    </div> 	      </div>         </div>                  <div>                  </div>                           <div fc05="" fc11="" nbw-blog="" ztag=""  js-fs2"="">转载自：<wbr><a rel="nofollow" href="http://hi.baidu.com/jrckkyy/blog/item/61d7869b264d64aec8eaf411.html">http://hi.baidu.com/jrckkyy/blog/item/61d7869b264d64aec8eaf411.html</a><div></div><div><span style="color: #333333; font-family: Arial; font-size: 13px; line-height: 20px; background-color: #f0f8ff;"><p style="line-height: normal;">#include &lt;stddef.h&gt;</p><p style="line-height: normal;">OS  version：Red Hat Enterprise Linux Server release 5.3 (Tikanga) Linux  2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64  GNU/Linux</p><p style="line-height: normal;"><strong style="line-height: normal;"><span style="line-height: normal; color: #ff0000;">size_t本身一个作用就是避免考虑64还是32。64位下Long和指针是64位的</span></strong></p><p style="line-height: normal;"><strong style="line-height: normal;"><span style="line-height: normal;"><span style="line-height: normal; background-color: #8c8c8c;">size_t</span><strong style="line-height: normal;"><span style="line-height: normal; background-color: #8c8c8c;">m_unNo;</span></strong></span></strong></p><p style="line-height: normal;"><strong style="line-height: normal;"><span style="line-height: normal; background-color: #8c8c8c;">sprintf(path,"%u",m_unNo); //这句在32位机器上正常 64位机器上会编译警告：&#8220;警告：格式 &#8216;%u&#8217; 需要类型 &#8216;unsigned int&#8217;，但实参 4 的类型为 &#8216;size_t&#8217;&#8221;</span></strong></p><p style="line-height: normal;"><strong style="line-height: normal;"><span style="line-height: normal; background-color: #8c8c8c;">%u 对应 unsigned int在64位机器上还是32位，而size_t已经变成64位了。</span></strong></p><p style="line-height: normal;"><strong style="line-height: normal;"><span style="line-height: normal; color: #ff0000;">char* 指针在64位下是64位</span></strong></p><p style="line-height: normal;"><strong style="line-height: normal;"><span style="line-height: normal; background-color: #8c8c8c;">m_pMem = new char[nSize];</span><br style="line-height: normal;" /><span style="line-height: normal; background-color: #8c8c8c;">int off = (int)m_pMem%nAlign; // 在 32位编译正常，在64位机器上编译报错：&#8220;&nbsp;错误：从 &#8216;char*&#8217; 到 &#8216;int&#8217; 的转换损失精度&#8221;</span></strong></p><p style="line-height: normal;"><strong style="line-height: normal;"><span style="line-height: normal; background-color: #8c8c8c;">改为就可以达到兼容效果了int off = (uint64_t)m_pMem%nAlign; // 因为int在64位下仍为32位，char&#215;已经变位64位了。</span></strong></p><p style="line-height: normal;">&nbsp;</p><p style="line-height: normal;">&nbsp;</p><p style="line-height: normal;">&nbsp;</p><p style="line-height: normal;">&nbsp;</p><p style="line-height: normal;">一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小，只规定级别。作下比较：</p><p style="line-height: normal;">16位平台</p><p style="line-height: normal;">char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个字节8位</p><p style="line-height: normal;">short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2个字节16位</p><p style="line-height: normal;">int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2个字节16位</p><p style="line-height: normal;">long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4个字节32位</p><p style="line-height: normal;">指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2个字节</p><p style="line-height: normal;">32位平台</p><p style="line-height: normal;">char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个字节8位</p><p style="line-height: normal;">short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2个字节16位</p><p style="line-height: normal;">int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4个字节32位</p><p style="line-height: normal;">long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4个字节</p><p style="line-height: normal;">long long 8个字节</p><p style="line-height: normal;">指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4个字节</p><p style="line-height: normal;">64位平台</p><p style="line-height: normal;">char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个字节</p><p style="line-height: normal;">short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2个字节</p><p style="line-height: normal;">int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4个字节</p><p style="line-height: normal;">long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8个字节（区别）</p><p style="line-height: normal;">long long 8个字节</p><p style="line-height: normal;">指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8个字节（区别）</p><p style="line-height: normal;">二、编程注意事项</p><p style="line-height: normal;">为了保证平台的通用性，程序中尽量不要使用long数据库型。可以使用固定大小的数据类型宏定义：</p><p style="line-height: normal;">typedef signed char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int8_t</p><p style="line-height: normal;">typedef short int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int16_t;</p><p style="line-height: normal;">typedef int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int32_t;</p><p style="line-height: normal;"># if __WORDSIZE == 64<br style="line-height: normal;" />typedef long int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int64_t;<br style="line-height: normal;" /># else<br style="line-height: normal;" />__extension__<br style="line-height: normal;" />typedef long long int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int64_t;</p><p style="line-height: normal;">#endif</p><p style="line-height: normal;">三、使用int时也可以使用intptr_t来保证平台的通用性，它在不同的平台上编译时长度不同，但都是标准的平台长度，比如64位机器它的长度就是8字节，32位机器它的长度是4字节，定义如下：</p><p style="line-height: normal;">#if __WORDSIZE == 64<br style="line-height: normal;" />typedef long int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intptr_t;<br style="line-height: normal;" />#else<br style="line-height: normal;" />typedef int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intptr_t;<br style="line-height: normal;" />#endif<br style="line-height: normal;" />编程中要尽量使用sizeof来计算数据类型的大小</p><p style="line-height: normal;">以上类型定义都有相应的无符号类型。</p><p style="line-height: normal;">另 外还有ssize_t和size_t分别是unsigned和signed size of computer word  size。它们也是表示计算机的字长，在32位机器上是int型，在64位机器上long型，从某种意义上来说它们等同于intptr_t和 uintptr_t。它们在stddef.h里面定义。需要注意的是socket的accept函数在有些操作系统上使用size_t是不正确的，因为 accept接收的int*类型，而size_t可能是long int 类型。后来BSD使用sock_t来替代它。</p></span></div></div></div></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/174987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2012-05-15 17:00 <a href="http://www.cppblog.com/colorful/archive/2012/05/15/174987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>