C语言中取0xABCDEF01分别以AB,CD,EF,01存入数组中
时间: 2024-08-17 16:01:53 浏览: 51
在C语言中,如果你想将十六进制数`0xABCDEF01`转换成四个部分存储在一个数组中,你可以先将其转换为整型,然后按照每一位分配到数组的不同索引位置。假设我们有一个长度为8的数组`arr[4]`:
```c
#include <stdio.h>
#include <inttypes.h> // 包含htonl函数用于字节顺序转换
// 将十六进制字符串转换为整数
uint32_t hex_to_int(const char* hex) {
uint32_t result = 0;
int i = 0;
while (hex[i]) {
if (hex[i] >= '0' && hex[i] <= '9') {
result = result * 16 + (hex[i] - '0');
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
result = result * 16 + (hex[i] - 'A' + 10);
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
result = result * 16 + (hex[i] - 'a' + 10);
}
i++;
}
return result;
}
void split_hex_into_array(const char* hex_str, uint8_t arr[]) {
uint32_t value = hex_to_int(hex_str);
arr[0] = static_cast<uint8_t>(value & 0xFF); // AB
value >>= 8; // 移除最低8位
arr[1] = static_cast<uint8_t>(value & 0xFF); // CD
value >>= 8; // 再移除8位
arr[2] = static_cast<uint8_t>(value & 0xFF); // EF
arr[3] = static_cast<uint8_t>(value >> 24); // 最后的01
}
int main() {
char hex[] = "ABCDEF01";
uint8_t arr[4];
split_hex_into_array(hex, arr);
printf("分割后的数组: ");
for (int i = 0; i < 4; ++i) {
printf("%02X ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个示例中,`split_hex_into_array`函数首先将十六进制字符串转换为`uint32_t`类型的值,然后逐位提取并存储到数组`arr`中。
阅读全文