如何将BIO_set_conn_ip与IP八位字节一起使用?

时间:2014-03-14 11:37:59

标签: binary openssl ip ubuntu-12.04

我正在尝试使用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

1 个答案:

答案 0 :(得分:3)

我想说这取决于手头的编译器。 GCC允许您使用二进制常量扩展,因此您可以使用 0b 前缀编写数字:

ip[0] = 0b01010101;

如果您的编译器没有此功能,您可以编写自己的函数,允许您编写二进制的字节数组表示并将其转换为十六进制值,因此您可以将其称为:

ip[0] = toHex("0b01010101");

其中toHex()接受一个字节数组并返回一个数值。要了解如何编写此类函数,请查看this article

您还可以使用BOOST_BINARY宏。