问题标签 [htonl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
49 浏览

c - 在函数调用中奇怪地使用花括号

有问题的代码来自这里(所以你可以看到完整的上下文):https ://www.anmolsarma.in/post/dccp/

在下面对 setsockopt 的调用中,有两部分我似乎无法找到相关信息,主要是因为我不知道要谷歌搜索什么,因为我不知道它叫什么。

和 :

那么,{} 在这种情况下做了什么?我完全可以看到用普通括号来做,但我认为 {} 保留用于其他用途。

例如:

和上面的意思一样吗?我以前从未见过将类似的东西插入到函数调用中。我不确定它是 C 还是 C++,我怀疑只是 C(基于包含)。我想知道它是否与 htonl 有时是宏有时是函数有关,以及如何尝试在函数的参数列表中使用它可能会导致问题?这个结构叫什么(所以我可以用谷歌搜索并做更多的研究)?

0 投票
2 回答
7261 浏览

include - _byteswap_uint64和_byteswap_ulong的跨平台定义

Visual Studio 定义_byteswap_uint64_byteswap_ulongstdlib.h.

我是否正确地假设这不是标准的并且不会在 Linux 或 Darwin 上编译?

有没有办法以跨平台的方式定义这些包含?

0 投票
4 回答
661 浏览

c - 使用 htonl(inet_addr(IP_str)) 将点分 IP 转换为整数返回 B 类和 C 类 IP 地址的负值

我正在尝试使用htonl(inet_addr(IP_str)).

问题是该函数对 B 类和 C 类的 IP 地址返回否定结果。

这是我的一些代码(简化):

结果:

我在像这样的一些在线工具上测试了结果。

考虑这行输出:

-1610612736等于160.0.0.0whiles1610612736等于96.0.0.0.

对我来说最重要的要求是速度。我不想检查每个 IP 是否属于 A 类。

我该如何解决这个问题?

谢谢?

0 投票
1 回答
133 浏览

c++ - 使用调度程序的 C++ NTOH 转换 - 事件队列

我们正在将 C 中的遗留代码重写为 C++。在我们系统的核心,我们有一个 TCP 客户端,它连接到 master。Master 将不断地流式传输消息。每个套接字读取都会产生 N 条格式为 - 的消息{type, size, data[0]}

现在我们不将这些消息复制到单独的缓冲区中——而只是将消息开头的指针、长度和 shared_ptr 传递给底层缓冲区给工作人员。

旧的 C 版本是单线程的,会进行如下的 NTOH 转换:

然后使用消息。

跟踪新代码的登录存在几个问题。

  1. 由于我们将消息分派给不同的工作人员,每个进行 ntoh 转换的工作人员都会导致缓存未命中问题,因为消息没有缓存对齐 - 即消息没有填充 b/w。

  2. 相同的消息可以由不同的工作人员处理 - 这是消息需要在本地处理并中继到另一个进程的情况。在这里,中继工作者需要原始网络顺序的消息,本地工作需要转换为主机顺序。显然,由于消息不重复,两者都不能满足。

我想到的解决方案是 -

  1. 复制消息并为所有中继工作人员发送一份副本(如果有)。在分派之前,在分派器本身中对属于同一缓冲区的所有消息进行 ntoh 转换 - 比如说通过调用 ahandler->ntoh(message);以便解决缓存未命中问题。

  2. 向每个工人发送原件。每个worker将消息复制到本地缓冲区,然后进行ntoh转换并使用它。在这里,每个工作人员都可以使用特定于线程的(thread_local)静态缓冲区作为便签本来复制消息。

现在我的问题是

  1. 选项 1 是进行 ntoh 转换的方式 - C++sy 吗?我的意思是结构的对齐要求将与 char 缓冲区不同。(我们还没有遇到任何问题。)。在这种情况下使用方案 2 应该没问题,因为暂存缓冲区可以具有 max_align_t 对齐,因此应该可以类型转换为任何结构。但这会导致复制整个消息 - 这可能非常大(比如几个 K 大小)

  2. 有没有更好的方法来处理这种情况?

0 投票
0 回答
103 浏览

c++ - C++ 反序列化解压缩的 C 结构

在我们的项目中,发送者 - legacy unchangeable - C code,struct以下列方式序列化 C。注意Message struct是解压的。

发件人

接收者

现在我们如何在接收器(C++)上反序列化它。我明白以下内容无效?

下面的好吗?

还有其他更好的方法吗?

0 投票
2 回答
1016 浏览

python - Python套接字:无法接收int数组

我尝试通过 winsockets 在 Python 和 c 程序之间进行进程间通信。发送字符串确实有效,但现在我尝试将一个 int 数组从 c 套接字发送到 python 套接字。

我已经发现我必须使用 htonl() 将 int 数组转换为字节流,因为 winsock2 的 send 函数不能直接发送 int 数组。

现在我想在 python 套接字中使用 ntohl() 但接收函数返回字节,而 ntohl() 需要一个整数值作为输入。

这是我的代码

C端(仅相关部分):

Python端(只是相关部分):

0 投票
1 回答
397 浏览

c++ - htonl出现分段错误

你好。我正在制作一个基本的代理服务器。我是 Cpp 套接字编程的新手,所以我很难理解许多与套接字编程相关的结构,例如 in_addr。

就像我说的那样,分段错误恰好发生在那条线上。我想这一定是因为语法。

their_addr.sin_addr.s_addr = htonl(((struct in_addr*)host->h_addr_list[0])->s_addr);

这不是因为 h_addr_list[0]。我已经检查过它不会产生分段错误。

如何更正此语法?

0 投票
1 回答
386 浏览

networking - 如何将网络字节顺序转换为主机字节顺序,反之亦然,用于 C 中的 IPv6 地址?

谁能解释ipv6 地址的网络字节顺序和主机字节顺序的概念。

0 投票
0 回答
150 浏览

c - Ruby 中的 ntohl() 和 htonl()?

我在 Ruby 中做一些低级别的位操作,想知道 C 中是否存在与htonl()andntohl()函数等效的 Ruby?

我遇到了 .pack 方法,但确实[1024].pack("N")提供了合适的 htonl 替代品吗?

0 投票
2 回答
56 浏览

c++ - 宏 htonl 将内部逗号解释为参数分隔符

这是编译时返回的异常错误,只有一些编译器参数。

好的g++ -std=c++11 -m64 -O3 -DNDEBUG

但是随着g++ -std=c++11 -m64 -Wall -g,会出现这个问题:

宏“htonl”传递了 7 个参数,但只需要 1 个

代码:

我不确定问题是来自调用htonl还是来自我的模板化哈希。

你知道怎么解决吗?

其他信息: