因为
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”。