background image

因为

iOS 是 Little Endian 的,所以结果是倒着的。

为了获取正着的值,需使用

CFSwapInt32HostToBig 函数来把 Little Endian 的 int 转换成 Big 

Endian 的形式,然后从指针中创建 NSData,最后再从 NSData 中创建 NSString 就可以输出
这个特殊枚举值的字符串内容了。(注意这个枚举值的字符串数据没有以

\0 结尾)

如下代码:

int

 value = 

'Mgen'

;

value = 

CFSwapInt32HostToBig

(value);

char

 *p = &value;

 

NSLog

(

@"%@"

, [[

NSString

 

alloc

initWithData

:[

NSData

 

dataWithBytes

:p

length

:

sizeof

(

int

)] 

encoding

:

NSUTF8StringEncoding

]);

输出:

Mgen

 

另一种方法就是手动为字符串数据加入结束符(

\0),然后作为 C 语言字符串输出也可以:

//将字节复制进数组,并添加字符串结尾\0

char

 bytes[

sizeof

(

int

) + 

1

];

memccpy

(bytes, p, 

1

sizeof

(

int

));

bytes[

sizeof

(

int

)] = 

0

;

 

NSLog

(

@"%s"

, bytes);

同样也会正确输出

“Mgen”。