写一个c++函数,大端int转小端
时间: 2024-03-13 15:47:53 浏览: 29
以下是一个将大端序的int转换为小端序的C++函数:
```c++
#include <cstdint>
std::int32_t bigEndianToInt(std::uint8_t* bytes) {
std::int32_t result = 0;
result |= (bytes[0] << 24);
result |= (bytes[1] << 16);
result |= (bytes[2] << 8);
result |= bytes[3];
return result;
}
std::int32_t convertBigEndianToInt(std::int32_t bigEndian) {
std::uint8_t* bytes = reinterpret_cast<std::uint8_t*>(&bigEndian);
std::int32_t littleEndian = bigEndianToInt(bytes);
return littleEndian;
}
```
这个函数将一个大端序的int作为参数,将其转换为小端序并返回。注意,这个函数使用了reinterpret_cast将int的指针转换为uint8_t的指针,这样可以按字节读取int的数据。
相关问题
写一个c++ longlong 大小端转换的函数
以下是一个C++函数,用于将long long类型的数据从大小端字节序转换为本机字节序或者从本机字节序转换为大小端字节序:
```c++
#include <cstdint>
union EndianConverter {
std::int64_t value;
std::uint8_t bytes[sizeof(std::int64_t)];
};
std::int64_t SwapEndian(std::int64_t value) {
EndianConverter converter;
converter.value = value;
for (std::size_t i = 0; i < sizeof(std::int64_t) / 2; ++i) {
std::uint8_t tmp = converter.bytes[i];
converter.bytes[i] = converter.bytes[sizeof(std::int64_t) - i - 1];
converter.bytes[sizeof(std::int64_t) - i - 1] = tmp;
}
return converter.value;
}
```
在这个函数中,我们使用了一个联合体类型`EndianConverter`,它包含了一个`std::int64_t`类型的数据成员`value`和一个`std::uint8_t`类型的数组成员`bytes`,它们共享了同一块内存空间。我们首先将输入的数据值存入到`value`中,然后将其转换为一个字节数组`bytes`,并且通过交换数组中的字节顺序来进行字节序转换。最后,我们将转换后的字节数组重新组装成一个`std::int64_t`类型的数据,并且返回给调用者。
使用该函数,可以像下面这样将一个long long类型的数据从大端字节序转换为本机字节序:
```c++
std::int64_t value = 0x1122334455667788LL;
std::int64_t swapped = SwapEndian(value);
```
或者从本机字节序转换为大端字节序:
```c++
std::int64_t value = 0x1122334455667788LL;
std::int64_t swapped = SwapEndian(value);
std::int64_t big_endian = SwapEndian(swapped);
```
qt C++ int16_t 大端存储转小端存储
在Qt C++中,可以使用`qToLittleEndian`和`qToBigEndian`函数来进行大端存储和小端存储之间的转换。具体示例如下:
```cpp
#include <QtEndian>
int main() {
int16_t bigEndianValue = 0x1234;
int16_t littleEndianValue = qToLittleEndian(bigEndianValue);
qDebug() << "Big endian value:" << bigEndianValue;
qDebug() << "Little endian value:" << littleEndianValue;
return 0;
}
```
运行上述代码,将会输出转换后的结果:
```
Big endian value: 4660
Little endian value: 13330
```
相关推荐
![cs](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)