user-0 提问: short长度的问题，应该怎么做？

回复:
user: user-1
content: 引用 楼主 fyzqzpd 的回复:cha str[256] = "12dkflskdjflksjdflsdjfsdfsf"; //我要取数据的前两个字节，而且保证这两个字节是short类型的数据，下面这句大多数时候是正确的。 short s = *(short*)str; //但有人说short不一定是两个字节，请问应该怎么做？ //WORD能保证是两个字节吗？ //double能保证是8个字节吗？ stdint.h的int16_t或者uint16_t。这个标准头的内容是在配置时或者安装时生成的，理论上会配合你当前平台，提供指定长度的类型。 如果你还怕不保险，可以设个编译时检查，要求长度是2字节。

user: user-0
content: 引用 12 楼 adeng1919 的回复:[quote=引用 11 楼 fyzqzpd 的回复:] [quote=引用 7 楼 zhao4zhong1 的回复:] 请随便谁举一个sizeof(short)不是2的实际例子。 short能保证在绝大多数操作系统中是两个字节吗？[/quote] http://bbs.csdn.net/topics/250076957参考这个帖子，和编译器有关，但是规定short不少于16位[/quote] 谢了，只要是跟编译器有关，跟系统无关那就我所谓了，反正我也不换编译器。

user: user-0
content: 无码不幸福，下面是读取二进制DXF格式文件的代码 ////////////////////////////////////////////////////////////////////////// BOOL BinDxfReadLine( DXFDATA &data, DXFLINE& tm ) {     tm.x1 = tm.y1 = tm.z1 = tm.x2 = tm.y2 = tm.z2 = 0.0; 	tm.color = 9999; 	tm.layer[0] = '\0'; 	 	while ( data.pIndex < data.pEnd ) 	{ 		int rec = ReadBinNumber();  		switch( data.dwGcode ) 		{ 		case 10: tm.x1    = *(double*)(data.pIndex); data.pIndex+=8; break; 		case 20: tm.y1    = *(double*)(data.pIndex); data.pIndex+=8; break; 		case 30: tm.z1    = *(double*)(data.pIndex); data.pIndex+=8; break; 		case 11: tm.x2    = *(double*)(data.pIndex); data.pIndex+=8; break; 		case 21: tm.y2    = *(double*)(data.pIndex); data.pIndex+=8; break; 		case 31: tm.z2    = *(double*)(data.pIndex); data.pIndex+=8; break; 		case 62: tm.color = *(short* )(data.pIndex); data.pIndex+=2; break; 		case 8:  ReadBinString(); strcpy( tm.layer, data.strValue ); break; 		case 0: 			{ 				if ( fabs(tm.x1-tm.x2) + fabs(tm.y1-tm.y2) < 0.000001f ) 				{ 					tm.x2 += 0.000001f; 				} 				if ( tm.color == 9999 ) 				{ 					tm.color = ReadLayerColor(tm.layer); 				}  				data.pIndex -= rec;  			} 			return true;  		default: ReadBinSpace(); break; 		} 		 	}  	return false; }

user: user-2
content: cha str[256] = "12dkflskdjflksjdflsdjfsdfsf"; short s = *(short*)str; assert(s==0x3231);//小端内存 assert(s==0x3132);//大端内存

user: user-3
content: 引用 11 楼 fyzqzpd 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] 请随便谁举一个sizeof(short)不是2的实际例子。 short能保证在绝大多数操作系统中是两个字节吗？[/quote] http://bbs.csdn.net/topics/250076957参考这个帖子，和编译器有关，但是规定short不少于16位

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:请随便谁举一个sizeof(short)不是2的实际例子。 short能保证在绝大多数操作系统中是两个字节吗？

user: user-0
content: 请原谅我的表达能力，其实我就是想知道，已知数据有两个字节是short数值，我想把它取出来，应该怎么做？

user: user-0
content: 引用 8 楼 supermegaboy 的回复:[quote=引用 楼主 fyzqzpd 的回复:] cha str[256] = "12dkflskdjflksjdflsdjfsdfsf"; //我要取数据的前两个字节，而且保证这两个字节是short类型的数据，下面这句大多数时候是正确的。 short s = *(short*)str; //但有人说short不一定是两个字节，请问应该怎么做？ //WORD能保证是两个字节吗？ //double能保证是8个字节吗？  请你先澄清一个问题，当short不是两字节时，你想怎么做？[/quote] 对呀？我想问的就是如果short不是两个字节我该怎么做

user: user-4
content: 引用 楼主 fyzqzpd 的回复:cha str[256] = "12dkflskdjflksjdflsdjfsdfsf"; //我要取数据的前两个字节，而且保证这两个字节是short类型的数据，下面这句大多数时候是正确的。 short s = *(short*)str; //但有人说short不一定是两个字节，请问应该怎么做？ //WORD能保证是两个字节吗？ //double能保证是8个字节吗？  请你先澄清一个问题，当short不是两字节时，你想怎么做？

user: user-2
content: 请随便谁举一个sizeof(short)不是2的实际例子。

user: user-5
content: 请问 turingo，wchar_t不一定是二个字节吧，因为有些unicode编码的中文占用三个字节或4个字节。 wchar_t仅代表是宽字符，不知道说得对不对。

user: user-6
content: 不同的平台不同的编译器对数据类型定义的大小都是有区别的，如果在开发中对精度要求很高的话，可以事先检测你要用的类型是占几个字节

user: user-7
content: 试试就清楚了！  引用 3 楼 fyzqzpd 的回复:[quote=引用 2 楼 turingo 的回复:] 1、目前来看，short基本上是16位的，以后不保证； 2、用wchar_t比较合适，它一定是两个字节。  [quote=引用 楼主 fyzqzpd 的回复:] cha str[256] = "12dkflskdjflksjdflsdjfsdfsf"; //我要取数据的前两个字节，而且保证这两个字节是short类型的数据，下面这句大多数时候是正确的。 short s = *(short*)str; //但有人说short不一定是两个字节，请问应该怎么做？ //WORD能保证是两个字节吗？ //double能保证是8个字节吗？[/quote]  //我要取short数值，要这样吗？ wchar_t  w = *(wchar_t*)str; short s = *(short*)w; [/quote]

user: user-0
content: 引用 2 楼 turingo 的回复:1、目前来看，short基本上是16位的，以后不保证； 2、用wchar_t比较合适，它一定是两个字节。  [quote=引用 楼主 fyzqzpd 的回复:] cha str[256] = "12dkflskdjflksjdflsdjfsdfsf"; //我要取数据的前两个字节，而且保证这两个字节是short类型的数据，下面这句大多数时候是正确的。 short s = *(short*)str; //但有人说short不一定是两个字节，请问应该怎么做？ //WORD能保证是两个字节吗？ //double能保证是8个字节吗？[/quote]  //我要取short数值，要这样吗？ wchar_t  w = *(wchar_t*)str; short s = *(short*)w;

user: user-7
content: 1、目前来看，short基本上是16位的，以后不保证； 2、用wchar_t比较合适，它一定是两个字节。  引用 楼主 fyzqzpd 的回复:cha str[256] = "12dkflskdjflksjdflsdjfsdfsf"; //我要取数据的前两个字节，而且保证这两个字节是short类型的数据，下面这句大多数时候是正确的。 short s = *(short*)str; //但有人说short不一定是两个字节，请问应该怎么做？ //WORD能保证是两个字节吗？ //double能保证是8个字节吗？

user: user-8
content: 标准似乎规定short就是两个字节啊，没有规定的是int