使用Objective-C ++从字节数组中读取特定字节并将它们转换为十六进制表示

时间:2011-03-22 08:25:56

标签: c++ objective-c objective-c++

我正在尝试将GUID C ++结构转换为guid的字符串表示形式。 GUID结构定义如下:

typedef struct _GUID {
ul_u_long   Data1;
ul_u_short  Data2;
ul_u_short  Data3;
ul_byte     Data4[ 8 ];
} GUID;

我在将Data4转换为字符串时遇到问题。可在此处找到此结构的说明:http://msdn.microsoft.com/en-us/library/aa373931%28VS.85%29.aspx。根据描述,该字节数组的前2个字节表示一组4个十六进制数字,接下来的6个字节包含第二组12个十六进制数字。

因此,给定像这样的指南6B29FC40-CA47-1067-B31D-00DD010662DA,字节数组在前2个字节中存储 B31D ,在接下来的6个字节中存储 00DD010662DA 字节。

所以,以这个guid为例,并假设我有一个名为 ulguid 的GUID类型的变量,我想要做的是提取 B31D-00DD010662DA < / em>来自字节数组 ulguid.Data4 with objective-c ++。我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

此代码段应该有效:

#include <cstdio>
#include <iostream>

GUID ulguid = {
  0x6B29FC40u, 0xCA47, 0x1067,
  {0xB3, 0x1D, 0x00, 0xDD, 0x01, 0x06, 0x62, 0xDA}
};

// 36 characters for the GUID, plus the zero terminator.
char buffer[37];

sprintf(buffer, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
        ulguid.Data1, ulguid.Data2, ulguid.Data3,
        ulguid.Data4[0], ulguid.Data4[1],
        ulguid.Data4[2], ulguid.Data4[3],
        ulguid.Data4[4], ulguid.Data4[5],
        ulguid.Data4[6], ulguid.Data4[7]);

// Prints: 6B29FC40-CA47-1067-B31D-00DD010662DA
std::cout << buffer;