C++ 4个有符号字节打包成32位无符号字节 //数据类型的声明,其中4个字节被打包到一个无符号的。 int xbyte(压缩字,int bytenum); int main() { int bytenum=0; typedef无符号压缩格式; 包装词; } //从字中提取字节,作为有符号整数返回。 整数x字节(压缩字,整数字节) { //在xbyte上的尝试失败 返回(word>>(bytenum
你已经有了C++ 4个有符号字节打包成32位无符号字节 //数据类型的声明,其中4个字节被打包到一个无符号的。 int xbyte(压缩字,int bytenum); int main() { int bytenum=0; typedef无符号压缩格式; 包装词; } //从字中提取字节,作为有符号整数返回。 整数x字节(压缩字,整数字节) { //在xbyte上的尝试失败 返回(word>>(bytenum,c++,bit-manipulation,C++,Bit Manipulation,你已经有了typedef行。把它作为这段代码的第一行,你就完成了。最基本的是typedefed名称必须在你使用它的任何地方都可见。你已经有了typedef行。把它作为这段代码的第一行,你就完成了。最基本的事情就是typedefed名称必须在您使用它的任何地方都可见。也许联合在这里会有用 // Declaration of data type where 4 bytes are packed into an unsigned. int xbyte(packed_t word, int byt
typedef
行。把它作为这段代码的第一行,你就完成了。最基本的是typedef
ed名称必须在你使用它的任何地方都可见。你已经有了typedef
行。把它作为这段代码的第一行,你就完成了。最基本的事情就是typedef
ed名称必须在您使用它的任何地方都可见。也许联合在这里会有用
// Declaration of data type where 4 bytes are packed into an unsigned.
int xbyte(packed_t word, int bytenum);
int main()
{
int bytenum = 0;
typedef unsigned packed_t;
packed_t word;
}
// Extract byte from word, return as signed integer.
int xbyte(packed_t word, int bytenum)
{
// Failed attempt at xbyte
return ( word >> (bytenum << 3)) & 0xff;
}
也许一个联盟在这里会有用
// Declaration of data type where 4 bytes are packed into an unsigned.
int xbyte(packed_t word, int bytenum);
int main()
{
int bytenum = 0;
typedef unsigned packed_t;
packed_t word;
}
// Extract byte from word, return as signed integer.
int xbyte(packed_t word, int bytenum)
{
// Failed attempt at xbyte
return ( word >> (bytenum << 3)) & 0xff;
}
首先,当然,您可以将def
packed\t
键入您需要的任何整数类型
需要;使用packeted\t
时,typedef必须随处可见,
不过
其次,word>(bytenum>(bytenum*8)
,甚至更好:
union packed_t
{
unsigned int unsignedInt;
char signedChar[4];
}
可移植性更强(不是可移植到不是2的机器上
8位字节的补码非常重要),您必须编写:
int tmp = word >> (bytenum * 8);
if ( (tmp & 0x80) != 0 )
tmp |= 0xFFFFFF80;
else
tmp &= 0x7F;
return tmp;
inttmp=(word>>(bytenum*CHAR_位))和(1 SCHAR_MAX)
tmp-=UCHAR_MAX+1;
返回tmp;
但这也取决于实际需要什么
字节取决于硬件中整数的实际表示形式
上面的代码忽略了这一点,并将低位字节返回为字节0,而不是0
必须是第一个字节。如果你真的想排序第n个字节
需要双关类型:
int tmp = (word >> (bytenum * CHAR_BIT)) & ((1 << CHAR_BIT) - 1);
if ( tmp > SCHAR_MAX )
tmp -= UCHAR_MAX + 1;
return tmp;
return*(重新解释cast(&word)+bytenum);
如果没有更多关于需要什么的信息,很难说
正确答案应该是什么。首先,当然,您可以将def
packed\t
键入所需的任何整数类型
需要;使用packeted\t
时,typedef必须随处可见,
不过
其次,word>(bytenum>(bytenum*8)
,甚至更好:
union packed_t
{
unsigned int unsignedInt;
char signedChar[4];
}
可移植性更强(不是可移植到不是2的机器上
8位字节的补码非常重要),您必须编写:
int tmp = word >> (bytenum * 8);
if ( (tmp & 0x80) != 0 )
tmp |= 0xFFFFFF80;
else
tmp &= 0x7F;
return tmp;
inttmp=(word>>(bytenum*CHAR_位))和(1 SCHAR_MAX)
tmp-=UCHAR_MAX+1;
返回tmp;
但这也取决于实际需要什么
字节取决于硬件中整数的实际表示形式
上面的代码忽略了这一点,并将低位字节返回为字节0,而不是0
必须是第一个字节。如果你真的想排序第n个字节
需要双关类型:
int tmp = (word >> (bytenum * CHAR_BIT)) & ((1 << CHAR_BIT) - 1);
if ( tmp > SCHAR_MAX )
tmp -= UCHAR_MAX + 1;
return tmp;
return*(重新解释cast(&word)+bytenum);
如果没有更多关于需要什么的信息,很难说
正确答案应该是什么。typedef unsigned packet;有什么问题吗?我想不出它有什么问题,它似乎很好。我应该初始化它什么。
typedef unsigned packet;
有什么问题吗?我想不出它有什么问题,它似乎很好。我应该初始化它什么。把它放进去在总管顶部或总管之前将其置于总管顶部或总管之前