我有一個工會如下:聯盟爲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