问题标签 [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.
c - 在函数调用中奇怪地使用花括号
有问题的代码来自这里(所以你可以看到完整的上下文):https ://www.anmolsarma.in/post/dccp/
在下面对 setsockopt 的调用中,有两部分我似乎无法找到相关信息,主要是因为我不知道要谷歌搜索什么,因为我不知道它叫什么。
和 :
那么,{} 在这种情况下做了什么?我完全可以看到用普通括号来做,但我认为 {} 保留用于其他用途。
例如:
和上面的意思一样吗?我以前从未见过将类似的东西插入到函数调用中。我不确定它是 C 还是 C++,我怀疑只是 C(基于包含)。我想知道它是否与 htonl 有时是宏有时是函数有关,以及如何尝试在函数的参数列表中使用它可能会导致问题?这个结构叫什么(所以我可以用谷歌搜索并做更多的研究)?
include - _byteswap_uint64和_byteswap_ulong的跨平台定义
Visual Studio 定义_byteswap_uint64
和_byteswap_ulong
在stdlib.h
.
我是否正确地假设这不是标准的并且不会在 Linux 或 Darwin 上编译?
有没有办法以跨平台的方式定义这些包含?
c - 使用 htonl(inet_addr(IP_str)) 将点分 IP 转换为整数返回 B 类和 C 类 IP 地址的负值
我正在尝试使用htonl(inet_addr(IP_str))
.
问题是该函数对 B 类和 C 类的 IP 地址返回否定结果。
这是我的一些代码(简化):
结果:
我在像这样的一些在线工具上测试了结果。
考虑这行输出:
-1610612736
等于160.0.0.0
whiles1610612736
等于96.0.0.0.
对我来说最重要的要求是速度。我不想检查每个 IP 是否属于 A 类。
我该如何解决这个问题?
谢谢?
c++ - 使用调度程序的 C++ NTOH 转换 - 事件队列
我们正在将 C 中的遗留代码重写为 C++。在我们系统的核心,我们有一个 TCP 客户端,它连接到 master。Master 将不断地流式传输消息。每个套接字读取都会产生 N 条格式为 - 的消息{type, size, data[0]}
。
现在我们不将这些消息复制到单独的缓冲区中——而只是将消息开头的指针、长度和 shared_ptr 传递给底层缓冲区给工作人员。
旧的 C 版本是单线程的,会进行如下的 NTOH 转换:
然后使用消息。
跟踪新代码的登录存在几个问题。
由于我们将消息分派给不同的工作人员,每个进行 ntoh 转换的工作人员都会导致缓存未命中问题,因为消息没有缓存对齐 - 即消息没有填充 b/w。
相同的消息可以由不同的工作人员处理 - 这是消息需要在本地处理并中继到另一个进程的情况。在这里,中继工作者需要原始网络顺序的消息,本地工作需要转换为主机顺序。显然,由于消息不重复,两者都不能满足。
我想到的解决方案是 -
复制消息并为所有中继工作人员发送一份副本(如果有)。在分派之前,在分派器本身中对属于同一缓冲区的所有消息进行 ntoh 转换 - 比如说通过调用 a
handler->ntoh(message);
以便解决缓存未命中问题。向每个工人发送原件。每个worker将消息复制到本地缓冲区,然后进行ntoh转换并使用它。在这里,每个工作人员都可以使用特定于线程的(thread_local)静态缓冲区作为便签本来复制消息。
现在我的问题是
选项 1 是进行 ntoh 转换的方式 - C++sy 吗?我的意思是结构的对齐要求将与 char 缓冲区不同。(我们还没有遇到任何问题。)。在这种情况下使用方案 2 应该没问题,因为暂存缓冲区可以具有 max_align_t 对齐,因此应该可以类型转换为任何结构。但这会导致复制整个消息 - 这可能非常大(比如几个 K 大小)
有没有更好的方法来处理这种情况?
c++ - C++ 反序列化解压缩的 C 结构
在我们的项目中,发送者 - legacy unchangeable - C code,struct
以下列方式序列化 C。注意Message struct
是解压的。
发件人
接收者
现在我们如何在接收器(C++)上反序列化它。我明白以下内容无效?
下面的好吗?
还有其他更好的方法吗?
python - Python套接字:无法接收int数组
我尝试通过 winsockets 在 Python 和 c 程序之间进行进程间通信。发送字符串确实有效,但现在我尝试将一个 int 数组从 c 套接字发送到 python 套接字。
我已经发现我必须使用 htonl() 将 int 数组转换为字节流,因为 winsock2 的 send 函数不能直接发送 int 数组。
现在我想在 python 套接字中使用 ntohl() 但接收函数返回字节,而 ntohl() 需要一个整数值作为输入。
这是我的代码
C端(仅相关部分):
Python端(只是相关部分):
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]。我已经检查过它不会产生分段错误。
如何更正此语法?
networking - 如何将网络字节顺序转换为主机字节顺序,反之亦然,用于 C 中的 IPv6 地址?
谁能解释ipv6 地址的网络字节顺序和主机字节顺序的概念。
c - Ruby 中的 ntohl() 和 htonl()?
我在 Ruby 中做一些低级别的位操作,想知道 C 中是否存在与htonl()
andntohl()
函数等效的 Ruby?
我遇到了 .pack 方法,但确实[1024].pack("N")
提供了合适的 htonl 替代品吗?
c++ - 宏 htonl 将内部逗号解释为参数分隔符
这是编译时返回的异常错误,只有一些编译器参数。
好的g++ -std=c++11 -m64 -O3 -DNDEBUG
但是随着g++ -std=c++11 -m64 -Wall -g
,会出现这个问题:
宏“htonl”传递了 7 个参数,但只需要 1 个
代码:
我不确定问题是来自调用htonl
还是来自我的模板化哈希。
你知道怎么解决吗?
其他信息: