有没有一种方法可以将一组整数更改为一个十六进制数字

问题描述 投票:0回答:1

所以我一直在尝试获取驱动器的mbr的LBA。我已经找到了正确的 LBA 索引号。这些数字已经是十六进制格式,我已经将它们分配给一个数组。当我尝试将数组转换为单个十六进制数字的 uint32_t 整数时,我得到了错误的答案。

` 为(i=446;i<512;i++) { fprintf(stdout, "%2x ",b[i]);

  if(i == 486 || i == 487 || i == 488 || i == 489)
  {
    //debugging

    
    LBAAddr[LBAByteNum] = b[i];
    LBAByteNum ++;
  }

} `

这是我获取 LBA 地址的地方

for(int i =0; i< 4; i++)
{
    printf("%2x", nums[i]);
    finalNum = (nums[i] << (8*i+1) ) | nums[i+1];
    
    printf("\n%x", finalNum);
    
    
}

我试图将数字向左移动以将其转换为单个十六进制数字。

例如,如果 for 循环打印出 0 0 0 0,我将其分配给数组。但当我转换它时,我得到 4e9052eb。

对于格式错误,我深表歉意,但非常感谢您的帮助! 谢谢!

arrays c hex
1个回答
0
投票

您需要知道数组的字节序和您的 uint32_t。

uint32_t convert(unsigned char *array, int endianess)
{
    endianess == !!endianess;
    uint32_t result = 0;
    for(size_t index = 0; index < sizeof(result); index++)
    {
        printf("%d\n", 24 * endianess + 8 * index * (!endianess * 2 + -1));
        result += ((uint32_t)array[index]) << (24 * endianess + 8 * index * (!endianess * 2 + -1));
    }
    return result;
}


int main(void)
{
    unsigned char arr[] = {0xaa,0xbb,0xcc,0xdd};

    printf("%"PRIx32"\n", convert(arr, 0));
    printf("%"PRIx32"\n", convert(arr, 1));
}
© www.soinside.com 2019 - 2024. All rights reserved.