我有一个工会如下:联盟为unsigned long long int类型投
typedef unsigned long GT_U32;
typedef unsigned short GT_U16;
typedef unsigned char GT_U8;
typedef union
{
GT_U8 c[8];
GT_U16 s[4];
GT_U32 l[2];
} GT_U64;
我想这个联盟投在以下几点:
typedef unsigned long long int UINT64;
我写的转换函数如下:
UINT64 gtu64_to_uint64_cast(GT_U64 number_u)
{
UINT64 casted_number = 0;
casted_number = number_u.l[0];
casted_number = casted_number << 32;
casted_number = casted_number | number_u.l[1];
return casted_number;
}
此功能使用l
构件进行变速和按位或。如果工会的s
或c
成员用于设置其值,会发生什么情况?
我不确定这个函数是否总能正确地转换值。我怀疑它与long
和short
的字节顺序有关。任何身体可以帮助吗?
下面列出了完整的示例程序。
#include <stdio.h>
typedef unsigned long GT_U32;
typedef unsigned short GT_U16;
typedef unsigned char GT_U8;
typedef union
{
GT_U8 c[8];
GT_U16 s[4];
GT_U32 l[2];
} GT_U64;
typedef unsigned long long int UINT64;
UINT64 gtu64_to_uint64_cast(GT_U64 number_u)
{
UINT64 casted_number = 0;
casted_number = number_u.l[0];
casted_number = casted_number << 32;
casted_number = casted_number | number_u.l[1];
return casted_number;
}
int main()
{
UINT64 left;
GT_U64 right;
right.s[0] = 0x00;
right.s[1] = 0x00;
right.s[2] = 0x00;
right.s[3] = 0x01;
left = gtu64_to_uint64_cast(right);
printf ("%llu\n", left);
return 0;
}
这一个如果访问你的数组的mem areya ..“right.l [3] = 0x01;” – eaanon01 2011-02-15 13:44:43
代码错了,没有l [3]。应该是,我想。 – Serkan 2011-02-15 13:48:22
纠正了这一点。 – 2011-02-15 13:48:22