免责:百度搜索AI自动生成,如果侵权联系我删除。
亲测好用。
C++ char*大小端转换
在C++中,可以使用位操作来实现char指针中的数据的大小端转换。以下是一个简单的例子,演示如何交换一个32位整数的字节顺序。
#include <iostream>
#include <cstdint>
void swap_endian(void* data, size_t size) {
char* bytes = reinterpret_cast<char*>(data);
for (size_t i = 0; i < size / 2; i++) {
std::swap(bytes[i], bytes[size - i - 1]);
}
}
int main() {
uint32_t value = 0x12345678; // 假设这是我们要转换的值
char* data = reinterpret_cast<char*>(&value);
std::cout << "Before swap: ";
for (size_t i = 0; i < sizeof(value); i++) {
std::cout << std::hex << static_cast<unsigned>(data[i]) << " ";
}
std::cout << std::endl;
swap_endian(data, sizeof(value)); // 执行大小端转换
std::cout << "After swap: ";
for (size_t i = 0; i < sizeof(value); i++) {
std::cout << std::hex << static_cast<unsigned>(data[i]) << " ";
}
std::cout << std::endl;
return 0;
}
这段代码定义了一个swap_endian函数,它接受一个指针和一个大小参数,然后交换指针指向的内存区域中字节的顺序。在main函数中,我们创建了一个uint32_t类型的变量,并转换为char*来调用swap_endian函数。
运行这段代码,你会看到一个32位整数的字节顺序从原始的12 34 56 78转换为78 56 34 12。这个例子演示了如何通过位操作来实现大小端转换。