【问题标题】:Convert Integer to Unsigned Long将整数转换为无符号长整数
【发布时间】:2015-05-26 19:29:25
【问题描述】:

尝试将函数 htonl() 用于向服务器发送初始化消息以及整数值(例如 5)的程序。但是,htonl() 需要以下 uint32_t integer hostlong em>

如何将 5 转换为无符号整数?

【问题讨论】:

  • 您能否接受基思的回答,以便我删除我的?这是误导我不应该回答的。
  • 我的意思是答案没有错,只是在你的情况下你真的不需要演员表。
  • @iharob 完成。谢谢!!

标签: c sockets int unsigned-integer


【解决方案1】:

htonl 函数在<arpa/inet.h> 中声明。假设你有一个合适的 #include 用于该标题:

#include <arpa/inet.h>`

声明

uint32_t htonl(uint32_t hostlong);

将是可见的,因此编译器知道预期的参数类型和结果类型。

如果你想将值 5 传递给 htonl 函数,只需传递它:

uint32_t result = htonl(5);

常量5 的类型为int。编译器将生成从intuint32_t 的隐式转换。 (很可能转换实际上不需要做任何事情。)

如果值5 存储在int 对象中,则相同:

int n = 5;
uint32_t result = htonl(n);

不需要显式转换(强制转换)。

(顺便说一句,“int”和“整数”之间有一个重要的区别。整数类型有很多,包括shortunsigned longuint32_t,等等。int 是其中一种类型的名称。unsigned long一个整数。)

【讨论】:

    【解决方案2】:

    我认为您正在寻找类型转换操作 - 类似于

    int foo = 5;
    htonl((unsigned int) foo);
    

    【讨论】:

    • @iharob 关于-5 的评论与此答案无关。建议阐述你的想法。
    • 假设htonl 的原型是可见的,则强制转换仅执行与隐式执行相同的转换。
    • @Keith Thompson 对于uint32_t htonl(uint32_t hostlong);,转换为(unsigned int) 通常与不进行转换的调用相同,但如果int/unsigned 是16 位,则情况会有所不同。考虑int foo = -1;
    • @chux:好点子!演员表不仅没有必要,而且可能有害。 (转换为 uint32_t 只是不必要的。)
    【解决方案3】:

    htonl(3) - Linux 手册页

    uint32_t htonl(uint32_t hostlong);
    

    htonl() 函数将无符号整数 hostlong 从主机字节顺序转换为网络字节顺序。

    所以你需要做的就是转换你的变量

    uint32_t x = 5;
    htonl(x);
    

    【讨论】:

    • "转换你的变量"??我看到一个作业,但没有演员表。
    • @chux:这很好,因为不需要演员表。 (澄清一下,隐式转换不是强制转换;术语“强制转换”仅指显式运算符。)
    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2012-03-23
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多