将 IPv4 地址转换为 std::array 字节时符号转换错误
Wrong sign conversion when converting IPv4 address to std::array of bytes
我对尝试将 ipv4 地址 in_addr
从 struct sockaddr_in
转换为 uint32_t
的 std::array 时收到的以下编译器警告感到困惑字节。
std::array<uint8_t, 4> IpAddress;
struct in_addr in_addr = {};
const char* addr_str = "168.212.226.204";
if (inet_pton(AF_INET, addr_str, &in_addr))
{
uint8_t* addr = reinterpret_cast<uint8_t*>(&(in_addr.s_addr));
for (int i = 0; i < 4; i++)
{
IpAddress[i] = addr[i]; // warning: conversion to 'std::array<unsigned char, 4>::size_type {aka long unsigned int}' from 'int' may change the sign of the result [-Wsign-conversion]
}
}
我该如何解决这个问题?
警告在这里:
IpAddress[i] = addr[i];
^^^
因为 i
是一个 int
,但是 std::array
的运算符 []
接受 size_type
,你会得到一个警告。
您可以通过简单地将 i
更改为 size_t
而不是 int
来解决此问题:
for (size_t i = 0; i < 4; i++)
警告似乎在数组索引本身,i
,循环计数器上。数组索引是无符号类型。仔细查看实际错误信息:
warning: conversion to 'std::array<unsigned char, 4>::size_type
猜猜size_type
是什么意思?
我对尝试将 ipv4 地址 in_addr
从 struct sockaddr_in
转换为 uint32_t
的 std::array 时收到的以下编译器警告感到困惑字节。
std::array<uint8_t, 4> IpAddress;
struct in_addr in_addr = {};
const char* addr_str = "168.212.226.204";
if (inet_pton(AF_INET, addr_str, &in_addr))
{
uint8_t* addr = reinterpret_cast<uint8_t*>(&(in_addr.s_addr));
for (int i = 0; i < 4; i++)
{
IpAddress[i] = addr[i]; // warning: conversion to 'std::array<unsigned char, 4>::size_type {aka long unsigned int}' from 'int' may change the sign of the result [-Wsign-conversion]
}
}
我该如何解决这个问题?
警告在这里:
IpAddress[i] = addr[i];
^^^
因为 i
是一个 int
,但是 std::array
的运算符 []
接受 size_type
,你会得到一个警告。
您可以通过简单地将 i
更改为 size_t
而不是 int
来解决此问题:
for (size_t i = 0; i < 4; i++)
警告似乎在数组索引本身,i
,循环计数器上。数组索引是无符号类型。仔细查看实际错误信息:
warning: conversion to 'std::array<unsigned char, 4>::size_type
猜猜size_type
是什么意思?