[objective-c]将 GUID 转换为 NSString-ObjectiveC

标签: UUID ios Objective-C
发布时间: 2016/10/2 19:47:50
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

已经定义了 GUID 结构如下图所示

typedef struct _GUID {
    unsigned long  Data1;
    unsigned short Data2;
    unsigned short Data3;
    unsigned char  Data4[ 8 ];

} GUID;

我正在将其转换为 NSString 。然而,我将反的值获取成第三 (long, short,short) 。它可能是由于大端字节序

示例︰

 GUID testGUID = { 0x865f82d0, 0x3303, 0x403d, { 0xbf, 0xcd, 0xeb, 0xb2, 0xde, 0xd9, 0xa0, 0x69 } };
 NSUUID *uuid = [[NSUUID alloc] initWithUUIDBytes:(const unsigned char*)&testGUID];
 NSString *uuidString = [uuid UUIDString];
 NSLog(@"%@", uuidString);

输出D0825F86-0333-3D40-BFCD-EBB2DED9A069

预期865F82D0-3303-403D-BFCD-EBB2DED9A069

让我知道有什么办法要更正此问题。任何帮助,这一点是非常赞赏。

解决方法 1:

@borrrden 评论固定的问题。

这里是解决方案。

GUID testGUID = { 0x865f82d0, 0x3303, 0x403d, { 0xbf, 0xcd, 0xeb, 0xb2, 0xde, 0xd9, 0xa0, 0x69 } };

testGUID.Data1 = NTOHL(testGUID.Data1);
testGUID.Data2 = NTOHS(testGUID.Data2);
testGUID.Data3 = NTOHS(testGUID.Data3);

NSUUID *uuid = [[NSUUID alloc] initWithUUIDBytes:(const unsigned char*)&testGUID];
NSString *uuidString = [uuid UUIDString];
NSLog(@"%@", uuidString)
赞助商