首页 > 解决方案 > 将 UInt32 / UInt8[16] 转换为 SOCKADDR_STORAGE

问题描述

我将使用 UInt32 形式的 IPv4 地址或 UInt8[16] 形式的 IPv6。当前的方法是将它们转换为字符串,然后用于WSAStringToAddress转换为PSOCKADDR_STORAGE. 我想知道是否有一个标准实现来减少转换为字符串。将有一个标识地址系列的标志,所以我至少可以让它消失。

DWORD ConvertStringToAddress(_In_ LPWSTR AddressString,
    _Out_ PSOCKADDR_STORAGE Address)
{
    DWORD Status = NO_ERROR;
    INT AddressSize;

    AddressSize = sizeof(*Address);
    Address->ss_family = AF_INET;

    if (WSAStringToAddress(AddressString,
        AF_INET,
        NULL,
        (PSOCKADDR)Address,
        &AddressSize))
    {
        AddressSize = sizeof(*Address);
        Address->ss_family = AF_INET6;

        if (WSAStringToAddress(AddressString,
            AF_INET6,
            NULL,
            (PSOCKADDR)Address,
            &AddressSize))
        {
            // handle error
        }
    }

    return Status;

标签: c++

解决方案


推荐阅读