我有一个char数组,表示GUID为字节(而不是字符),但我必须反转一半的数组。 之所以发生这种情况,是因为我使用sscanf将GUID字符串转换为char数组(表示字节),使用:
sscanf(strguid,"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
,&arr[0],&arr[1],
,&arr[2],&arr[3],....,&arr[15]);
我拥有的数组就是:
2EC5D8AA85E74B5E872462155EAA9D51
我必须将其反转,以便提供正确的GUID:
AAD8C52EE7855E4B872462155EAA9D51
我尝试了以下内容:
unsigned int temp;
memcpy(&temp,&arr[0],sizeof(char));
memcpy(&arr[0],&arr[3],sizeof(char));
memcpy(,&arr[3],&temp,sizeof(char));
等等。 (第二个是第三个,第五个是第六个,第七个是第八个)
有更简单的方法吗?
答案 0 :(得分:0)
如果我理解你的问题,你需要更改GUID
struct
typedef struct {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
byte Data4[ 8 ];
} GUID;
你可以试试这个
std::reverse(guid_, guid_ + 4);
std::reverse(guid_ + 4, guid_ + 6);
std::reverse(guid_ + 6, guid_ + 8);
但我更喜欢像这样改变sscanf格式
const char *string_ = "AAD8C52E-E785-5E4B-8724-62155EAA9D51";
GUID guid_;
sscanf(string_, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
&guid_.Data1, &guid_.Data2, &guid_.Data3,
&guid_.Data4[0], &guid_.Data4[1], &guid_.Data4[2], &guid_.Data4[3], &guid_.Data4[4], &guid_.Data4[5], &guid_.Data4[6], &guid_.Data4[7]);
请注意,您需要检查输入字符串长度以避免更短的字符串解析