强转不行?

真是源于感知 2012-05-30 05:20:26
编译时报错,是在64位系统下编译的。

sa为struct sockaddr_in6 sa;
ip为 unsigned long

这一行报错 sa.sin6_addr.s6_addr=ip;

error: incompatible types in assignment of ‘long unsigned int’ to ‘uint8_t [16]’


即使强转后还是报错,是什么原因呢?

求指教!!!
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
真是源于感知 2012-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

uint8_t [16]是数组,不是整数。
用函数转换。
[/Quote]

恩,这个问题解决了,正在学习中,就是得用函数转换,呵呵
Wenxy1 2012-06-01
  • 打赏
  • 举报
回复
uint8_t [16]是数组,不是整数。
用函数转换。
橡皮擦 2012-05-30
  • 打赏
  • 举报
回复
struct in6_addr
{
union
{
uint8_t u6_addr8[16];
uint16_t u6_addr16[8];
uint32_t u6_addr32[4];
} in6_u;
# define s6_addr in6_u.u6_addr8
# define s6_addr16 in6_u.u6_addr16
# define s6_addr32 in6_u.u6_addr32
这是ipv6的结构体定义

struct sockaddr
{
sa_family_t sa_family;
char sa_data[14];
};
这是通用地址结构的定义

struct sockaddr_in6
{
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo;
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};
这个ipv6通用地址结构定义

上面这三个你仔细的看一下,就知道你错在哪了
橡皮擦 2012-05-30
  • 打赏
  • 举报
回复
struct in6_addr
{
union
{
uint8_t u6_addr8[16];
uint16_t u6_addr16[8];
uint32_t u6_addr32[4];
} in6_u;
# define s6_addr in6_u.u6_addr8
# define s6_addr16 in6_u.u6_addr16
# define s6_addr32 in6_u.u6_addr32
这是ipv6的结构体定义

struct sockaddr
{
sa_family_t sa_family;
char sa_data[14];
};
这是通用地址结构的定义

struct sockaddr_in6
{
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo;
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};
这个ipv6通用地址结构定义

上面这三个你仔细的看一下,就知道你错在哪了

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧