搜尋此網誌

2013年12月12日 星期四

在Linux 32bits與64bits中的int與long為何bytes的length不同?

在Linux 64bits中的long為8 bytes,但在32bits中的long則為4 bytes。
x86的int則為2bytes,但Arm的架構則為4bytes。
如何解決這些資料結構問題呢?
請使用下面的函式庫stdint.h。
#include
它的內容如下:
typedef signed char int8_t
typedef unsigned char uint8_t
typedef signed int int16_t
typedef unsigned int uint16_t
typedef signed long int int32_t
typedef unsigned long int uint32_t
typedef signed long long int int64_t
typedef unsigned long long int uint64_t
.........

把它轉成自己的macros.
#define i8 int8_t
#define u8 uint8_t
#define i16 int16_t
#define u16 uint16_t
#define i32 int32_t
#define u32 uint32_t
#define i64 int64_t
#define u64 uint64_t

使用 uintX_t or intX_t 這些結構宣告的變數可以確保它的資料長度是固定的,在32bits、64bits或不CPU架構的編譯器的切換。

使用自己的macros下次轉換其他結構會比較方便。

沒有留言:

張貼留言