问题标签 [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 - 与 __builtin_bswap32 相关的编译错误
我正在玩包含以下代码的开源
看起来它检查系统是大端还是小端if (htonl(13) == 13)
。这是正确的吗?你能解释一下为什么要这样检查吗?为什么他使用 13?
也addr = __builtin_bswap32(addr);
导致编译问题“未定义的引用”。有解决方案吗?看起来该功能在新版本的 gcc 库中不再存在。这是正确的吗?
编辑:
我使用的工具链是 toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1
对于我在编译中使用的选项:
对于 c to object 编译选项:
-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -I. -I/opt/lampp/htdocs/backfire/staging_dir/target-i386_uClibc-0.9.30.1/usr/include -O2 -pipe -march=i486 -funit-at-a-time -fhonour-copts -D_GNU_SOURCE -MT
对于二进制对象(链接器)
-O2 -pipe -march=i486 -funit-at-a-time -fhonour-copts -D_GNU_SOURCE -L/opt/lampp/htdocs/backfire/staging_dir/target-i386_uClibc-0.9.30.1/usr/lib -L/opt/lampp/htdocs/backfire/staging_dir/target-i386_uClibc-0.9.30.1/lib -L/opt/lampp/htdocs/backfire/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/lib -Wl,-rpath-link=/opt/lampp/htdocs/backfire/staging_dir/target-i386_uClibc-0.9.30.1/usr/lib
java - 如何将 c++ 双打从一个系统发送到另一个发送方:Winsock 接收方:Java
发送C端
在 Java 方面,我将网络数据读入 char[8]
执行转换回双倍的正确方法是什么?是否可以简单地发送一个字符串并将其解析回双倍?
sockets - Windows 套接字 htons(80) 与 0x5000
当我将端口写入 SOCKADDR_IN 结构时,我可以使用 0x5000 代替 htons(80) 吗?
(为什么是 0x5000?——我调试了 htons(80),它返回 0x5000)
c - Little Endian 中的 ntohl() 与 htonl()
请澄清我的疑问,因为我对以下内容感到非常困惑,而且我在网上的任何其他地方都找不到干净的答案。
输出:
在这里htonl(0x44332211)
=> 我正在将小端(LE)转换为 BE。所以输出将是0x11223344
. 我明白了。我的问题是ntoh()
. 现在ntohl(0x44332211)
=> 什么?
在这里,我在 1 个终端上执行这两个命令。所以主机到网络,即hton()
意味着我的终端到网络。那讲得通。但这里ntohl()
意味着什么?ntohl()
如果我们有:
还ntoh
需要一个网络字节顺序,即大端。请解释ntohl()
上面的意思以及为什么它的打印与打印相同0x11223344
,为什么不打印0x44332211
?
c - 有符号和无符号整数之间的转换是否保持内存中变量的精确位模式?
x
我想通过套接字传递一个 32 位有符号整数。为了让接收者知道期望哪个字节顺序,我htonl(x)
在发送之前调用。htonl
期望 auint32_t
虽然,我想确定当我将 myint32_t
转换为 a时会发生什么uint32_t
。
x
和each中的字节是否总是u
完全相同?怎么回滚:
我意识到负值转换为大的无符号值,但这并不重要,因为我只是在另一端回退。但是,如果强制转换与实际字节混淆,那么我不能确定强制转换会返回相同的值。
memcpy - 使用 htonl 转换一个 int 数字,并将 memcpy 转换为一个 char*,但没有
像这样的代码:
在此之后,strBuf 中没有任何内容,为什么?
但是如果我输入一个大数字,比如100000001
,就可以了吗?
有什么问题?
ios - iOS 设备之间的字节顺序是否相同,这是否使得在 iOS 设备之间使用 htonl 和 ntohl 是不必要的?
我正在阅读有关如何将 NSData 用于网络消息的示例。
创建 NSData 时,该示例使用:
将 NSData 转换回来时,该示例使用:
在这个例子中是不是没有必要使用 htonl 和 ntohl ? - 由于数据是在 iOS 设备上打包/解包的,字节顺序不会相同,因此不需要使用 htonl 和 ntohl。-使用方式不正确吗?该示例使用 htonl 进行打包,使用 ntohl 进行解包。但实际上,如果知道发送者或接收者正在使用特定格式,难道不应该只这样做吗?
c - 使用 ntohl() 初始化 const 变量
我正在尝试使用适当字节交换的值初始化全局范围的 const 变量。
使用 gcc 失败并显示“错误:初始化元素不是常量”。是的,好的,所以 gcc 头文件将 ntohl() 定义为一个函数或“do {...} while (0)”或类似的东西,在编译时无法评估。真可惜。
我能做些什么来达到同样的目的吗?我需要为适当的结束性初始化值,并且我希望它是一个全局范围的常量。除了滚动我自己的类似 ntohl 的宏之外,有没有办法说服 gcc 这样做?
(顺便说一句,我注意到 clang 定义了 ntohl() 以便可以在编译时对其进行评估。上面的代码示例与 clang 完美配合。不幸的是,我没有选择编译器。)
c - 如何在 Linux 内核中将 __u32 转换为 __be32
我有一个变量
我有一个功能
我需要将 foo 的返回值存储在变量中x
。
这是对的吗?我很困惑ntohl()
and的返回类型是什么htonl()
。他们是对立的吗?
要检查输出,我需要重新编译内核,我不想让我的系统出现任何错误。所以我在这里问。
c++ - 使用 memcpy 将 uint32_t htonl 转换为 char[4] 不会给出输出
我的问题有点类似于这个链接中的那个使用 htonl 转换一个 int 数字,并将 memcpy 转换为一个 char*,但什么都没有,还有一些其他类似的问题,但我问一个新问题的原因是因为我没有能够找到解决方案。我想做的是在发送实际消息(sendBuffer)之前将消息的长度从htonl添加为4个字节
我已经好几年没有接触过 C++了,所以请原谅我在这里做错了任何愚蠢的事情。