我想设置一个s_addr变量的第一个字节,它只是一个无符号长整数。这可能吗?如果可以,怎么做?
它不是字节数组,所以我不能像这样访问它:
struct in_addr addr;
addr.s_addr[0] = 1; // Set this byte to the number 1, or in hex: 0x01
编辑:
事实证明,我需要最后一个(即第 4 个)字节而不是第一个字节。但是由于您的帮助,我现在有了:
*((char *)&addr.s_addr + 3) = 1;
我想设置一个s_addr变量的第一个字节,它只是一个无符号长整数。这可能吗?如果可以,怎么做?
它不是字节数组,所以我不能像这样访问它:
struct in_addr addr;
addr.s_addr[0] = 1; // Set this byte to the number 1, or in hex: 0x01
编辑:
事实证明,我需要最后一个(即第 4 个)字节而不是第一个字节。但是由于您的帮助,我现在有了:
*((char *)&addr.s_addr + 3) = 1;
一种丑陋且可能不安全(但仍被广泛采用)的方式是这样的:
*(char *)&addr.s_addr = 42;
如果您知道这addr.s_addr是一个unsigned long问题,并且如果“第一个”字节是指“最低有效”字节,那么您可以使用按位运算符作为更安全的替代方案,例如
addr.s_addr &= ~0xffUL; // clear previous contents of LS byte
addr.s_addr |= 0x01UL; // set LS byte to 1
您获取它的地址,将其解释为指向 a 的指针char并取消引用它:
unsigned long ul;
*reinterpret_cast<char*>(&ul) = 0;
// ina is struct sockaddr_in
char* address = a1 = inet_ntoa(ina.sin_addr);
*address = x;
or
*(char*)&addr.s_addr = x;