该程序的功能是将一个16位无符号整数(mapId)进行网络字节序(Big-Endian)转换,然后将其转换为字节流,最后再将字节流转换回原始的mapId。

程序的输出为:

0x64 0x56 Restored mapId: 16872

首先,使用htons函数将mapId从主机字节序转换为网络字节序(Big-Endian),并将结果存储在tmpMapId中。

然后,将tmpMapId的字节表示形式存储在std::vector<uint8_t> resOut中,以便在网络上传输。

接下来,使用std::memcpy函数将resOut中的字节复制回restoredTmpMapId中,并使用ntohs函数将其从网络字节序转换回主机字节序,恢复原始的mapId。

最后,程序输出恢复的mapId。

#include <iostream>
#include <cstdint>
#include <vector>
#include <cstring>
#include <arpa/inet.h>

int main() {
    uint16_t mapId = 1687228718;
    uint16_t tmpMapId = htons(mapId);

    std::vector<uint8_t> resOut;
    uint8_t *ptr = reinterpret_cast<uint8_t*>(&tmpMapId);
    
    for (size_t i = 0; i < sizeof(tmpMapId); ++i) {
        resOut.push_back(*(ptr + i));
    }
    
    for (const auto& byte : resOut) {
        std::cout << '0x' << std::hex << static_cast<int>(byte) << ' '; 
    }
    
    // 将字节重新转换为mapId
    uint16_t restoredTmpMapId;
    std::memcpy(&restoredTmpMapId, resOut.data(), sizeof(restoredTmpMapId));
    uint16_t restoredMapId = ntohs(restoredTmpMapId);

    std::cout << '\nRestored mapId: ' << restoredMapId << std::endl;

    return 0;
}
C++ 网络字节序转换示例: 16位无符号整数

原文地址: https://www.cveoy.top/t/topic/oPdR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录