我正在尝试使用OpenSSL的此功能 BIO_set_conn_ip(b,ip) 它使用二进制格式将IP地址设置为ip,即以big-endian形式指定IP地址的四个字节。
以下是Bio_set_conn_ip的man。
我想知道如何将ip传递给这个函数。
让我们说这个100.100.100.100的IP
如果我使用十六进制,我会预先 0x 执行此操作:
ip[0] = 0x64;
ip[1] = 0x64;
ip[2] = 0x64;
ip[3] = 0x64;
但是当我需要使用二进制表格时会发生什么? 我尝试传递其十进制值,如下所示:
ip[0] = 1100100;
编译器不会抱怨链接器, 但这似乎不起作用 因为使用 b (* BIO_do_connect(b)*)的连续函数返回负值。
我使用的编译器是GCC
答案 0 :(得分:3)
我想说这取决于手头的编译器。 GCC允许您使用二进制常量扩展,因此您可以使用 0b 前缀编写数字:
ip[0] = 0b01010101;
如果您的编译器没有此功能,您可以编写自己的函数,允许您编写二进制的字节数组表示并将其转换为十六进制值,因此您可以将其称为:
ip[0] = toHex("0b01010101");
其中toHex()接受一个字节数组并返回一个数值。要了解如何编写此类函数,请查看this article
您还可以使用BOOST_BINARY宏。