//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
16 个解决方案
#1
标准似乎规定short就是两个字节啊,没有规定的是int
#2
1、目前来看,short基本上是16位的,以后不保证;
2、用wchar_t比较合适,它一定是两个字节。
2、用wchar_t比较合适,它一定是两个字节。
#3
//我要取short数值,要这样吗?
wchar_t w = *(wchar_t*)str;
short s = *(short*)w;
#4
试试就清楚了!
1、目前来看,short基本上是16位的,以后不保证;
2、用wchar_t比较合适,它一定是两个字节。 cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?//我要取short数值,要这样吗?
wchar_t w = *(wchar_t*)str;
short s = *(short*)w;
#5
不同的平台不同的编译器对数据类型定义的大小都是有区别的,如果在开发中对精度要求很高的话,可以事先检测你要用的类型是占几个字节
#6
请问 turingo,wchar_t不一定是二个字节吧,因为有些unicode编码的中文占用三个字节或4个字节。
wchar_t仅代表是宽字符,不知道说得对不对。
wchar_t仅代表是宽字符,不知道说得对不对。
#7
请随便谁举一个sizeof(short)不是2的实际例子。
#8
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
请你先澄清一个问题,当short不是两字节时,你想怎么做?
#9
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
请你先澄清一个问题,当short不是两字节时,你想怎么做?
对呀?我想问的就是如果short不是两个字节我该怎么做
#10
请原谅我的表达能力,其实我就是想知道,已知数据有两个字节是short数值,我想把它取出来,应该怎么做?
#11
请随便谁举一个sizeof(short)不是2的实际例子。
short能保证在绝大多数操作系统中是两个字节吗?
#12
请随便谁举一个sizeof(short)不是2的实际例子。
short能保证在绝大多数操作系统中是两个字节吗?
http://bbs.csdn.net/topics/250076957参考这个帖子,和编译器有关,但是规定short不少于16位
#13
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
short s = *(short*)str;
assert(s==0x3231);//小端内存
assert(s==0x3132);//大端内存
#14
无码不幸福,下面是读取二进制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;
}
#15
请随便谁举一个sizeof(short)不是2的实际例子。
short能保证在绝大多数操作系统中是两个字节吗?
http://bbs.csdn.net/topics/250076957参考这个帖子,和编译器有关,但是规定short不少于16位
谢了,只要是跟编译器有关,跟系统无关那就我所谓了,反正我也不换编译器。
#16
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
stdint.h的int16_t或者uint16_t。这个标准头的内容是在配置时或者安装时生成的,理论上会配合你当前平台,提供指定长度的类型。
如果你还怕不保险,可以设个编译时检查,要求长度是2字节。
#1
标准似乎规定short就是两个字节啊,没有规定的是int
#2
1、目前来看,short基本上是16位的,以后不保证;
2、用wchar_t比较合适,它一定是两个字节。
2、用wchar_t比较合适,它一定是两个字节。
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
#3
1、目前来看,short基本上是16位的,以后不保证;
2、用wchar_t比较合适,它一定是两个字节。 cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
//我要取short数值,要这样吗?
wchar_t w = *(wchar_t*)str;
short s = *(short*)w;
#4
试试就清楚了!
1、目前来看,short基本上是16位的,以后不保证;
2、用wchar_t比较合适,它一定是两个字节。 cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?//我要取short数值,要这样吗?
wchar_t w = *(wchar_t*)str;
short s = *(short*)w;
#5
不同的平台不同的编译器对数据类型定义的大小都是有区别的,如果在开发中对精度要求很高的话,可以事先检测你要用的类型是占几个字节
#6
请问 turingo,wchar_t不一定是二个字节吧,因为有些unicode编码的中文占用三个字节或4个字节。
wchar_t仅代表是宽字符,不知道说得对不对。
wchar_t仅代表是宽字符,不知道说得对不对。
#7
请随便谁举一个sizeof(short)不是2的实际例子。
#8
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
请你先澄清一个问题,当short不是两字节时,你想怎么做?
#9
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
请你先澄清一个问题,当short不是两字节时,你想怎么做?
对呀?我想问的就是如果short不是两个字节我该怎么做
#10
请原谅我的表达能力,其实我就是想知道,已知数据有两个字节是short数值,我想把它取出来,应该怎么做?
#11
请随便谁举一个sizeof(short)不是2的实际例子。
short能保证在绝大多数操作系统中是两个字节吗?
#12
请随便谁举一个sizeof(short)不是2的实际例子。
short能保证在绝大多数操作系统中是两个字节吗?
http://bbs.csdn.net/topics/250076957参考这个帖子,和编译器有关,但是规定short不少于16位
#13
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
short s = *(short*)str;
assert(s==0x3231);//小端内存
assert(s==0x3132);//大端内存
#14
无码不幸福,下面是读取二进制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;
}
#15
请随便谁举一个sizeof(short)不是2的实际例子。
short能保证在绝大多数操作系统中是两个字节吗?
http://bbs.csdn.net/topics/250076957参考这个帖子,和编译器有关,但是规定short不少于16位
谢了,只要是跟编译器有关,跟系统无关那就我所谓了,反正我也不换编译器。
#16
cha str[256] = "12dkflskdjflksjdflsdjfsdfsf";
//我要取数据的前两个字节,而且保证这两个字节是short类型的数据,下面这句大多数时候是正确的。
short s = *(short*)str;
//但有人说short不一定是两个字节,请问应该怎么做?
//WORD能保证是两个字节吗?
//double能保证是8个字节吗?
stdint.h的int16_t或者uint16_t。这个标准头的内容是在配置时或者安装时生成的,理论上会配合你当前平台,提供指定长度的类型。
如果你还怕不保险,可以设个编译时检查,要求长度是2字节。