【问题标题】:store 32 bit int into a char buffer将 32 位 int 存储到 char 缓冲区中
【发布时间】:2013-01-29 17:14:38
【问题描述】:

我正在使用一个 UDP 程序,该程序收集要发送到 char 数组中的数据,但我需要发送的数据是 32 位 int。如何发送这些数据?

【问题讨论】:

  • 用什么语言?你有代码吗?在 C 中,整数可以安全地转换为 char(字节)数组表示。您只需先将其转换为网络字节顺序。
  • 对不起,我应该指定 - 是的,它在 C 中。我还没有任何代码,我拥有的代码与这个主题无关,所以这无济于事......不过我可以这么说,我使用的是 NetBurner 开发工具包,他们有一个内置的操作系统,允许您获取一个字符数组并围绕它形成一个 UDP 数据包。不能是int类型,只能是char。由于我所有的数据都是 32 位长,我不知道如何将其转换为 char 类型。我在这方面有点新手,虽然我了解一些东西,但我还有很多东西要学..

标签: c udp char int


【解决方案1】:

在 C 中,整数类型(或任何类型)可以安全地在字符数组中表示,并使用指针转换返回。这是由 C 标准保证的。

在套接字编程中,您通常希望对之前转换为网络字节顺序的整数执行此操作:

uint32_t translated_int = htonl(original_int);
char *binary_string = (char *)&translated_int;
// binary_string now a pointer to the translated_int, represented as a char array

如果您需要副本来传递它,您可以使用memcpy 来代替:

char binary_string[ sizeof(translated_int) ];
memcpy(binary_string, &translated_int, sizeof translated_int);
// binary_string now a copy of translated_int, represented as a char array

如果你想把它翻译回来:

uint32_t translated_int, original_int;
memcpy(&translated_int, binary_string, sizeof translated_int);
original_int = ntohl(translated_int);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多