更改s_addr的第一个字节
Change first byte of s_addr
我想设置一个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
你获取它的地址,将其解释为指向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;
相关文章:
- 获取向量C++中第一个值和最后一个值的和
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 是否强制转换void**并将第一个字节设置为nullptr
- 检查 IP 第一个八位字节是否不以 127 / 224 或 255 开头
- std::memcmp 可以读取超过第一个差异的任何字节吗?
- 如何创建 std::vector of char/std::byte,其中第一个字节对齐到 16 个字节,但没有填充
- 更改s_addr的第一个字节
- 不能很好地与send()和recv()一起使用,短字符串的第一个字节丢失了.c++
- 从文件输出原始字节时,第一个字节已损坏
- C++ 将向量转换为<BYTE>第一个向量字节为 0 的字符串
- CryptDecrypt只解密第一个字节
- c++ fseek:是位置0或1的第一个字节
- 查找数组中给定索引的第一个和最后一个字节的地址
- 指向矢量<float>第一个字节的指针