如何扭转一系列字符

How to reverse an array of chars

本文关键字:字符 一系列 何扭转      更新时间:2023-10-16

我有一个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));

等等。(第二,第三,第六和第七的第五,第八的第五)

有一个更简单的方法吗?

如果我理解您的问题正确,您需要更改GUID struct

的3个第一成员的Endianness
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]);

建议您需要检查输入字符串长度,以避免较短的字符串解析