将 int 14236 转换为十六进制 379C 作为 C++ 中的 char[37,9C]

发布于 2024-12-20 03:39:51 字数 298 浏览 4 评论 0原文

背景

我正在创建一个简单的 BOOTP/DHCP 服务器,并且正在努力创建一些数据包字节 - 特别是 DHCP 选项 13、FileSize。

规范规定该选项的总长度为 64 字节 => 1 个字节表示 ID (13),1 个字节表示数据长度,其余字节作为数据 OR 0。

问题

我需要将 int 值 14236 表示为我的数据,这相当于十六进制的 379C,但这需要分布在 2 个字节的数据上。如何获取 int 并获取数据的 char[]?

Background

I am creating a simple BOOTP/DHCP server, and I am struggling with creating some of the packet bytes - in particular, the DHCP option 13, FileSize.

The spec states the option as having a total length of 64 bytes => 1 byte for ID (13), 1 byte for data length, and the remaining bytes as data OR 0.

Problem

I need to express the int value 14236 as my data, which equates to 379C in HEX, but this needs to be spread over 2 bytes of data. How do I take an int and get a char[] of the data?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏天碎花小短裙 2024-12-27 03:39:51

它可能需要采用网络字节顺序。如果是这样,那么您可以使用 htons。如果你想在后两个字节中使用它:

char buffer[4];
buffer[0] = 13;   // code
buffer[1] = 2;    // length
*(uint16_t*)(buffer + 2) = htons( 14236 );

It likely needs to be in network byte order. If so, then you can use htons. If you want it in the second two bytes:

char buffer[4];
buffer[0] = 13;   // code
buffer[1] = 2;    // length
*(uint16_t*)(buffer + 2) = htons( 14236 );
春花秋月 2024-12-27 03:39:51

您可以使用此代码:

int size;
assert(size < 0x10000);

unsigned char twoBytes[];
twoBytes[0] = size & 0xFF;
twoBytes[1] = size >> 8;

You can use this code:

int size;
assert(size < 0x10000);

unsigned char twoBytes[];
twoBytes[0] = size & 0xFF;
twoBytes[1] = size >> 8;
难理解 2024-12-27 03:39:51
int size = 14236;
unsigned char bytes[2] = { (size >> 8) & 0xff, size & 0xff };

printf("%x%x", bytes[0], bytes[1]);

小心:您需要确保两个字节按网络顺序放置在数组中,如果我没有记错的话,这是大端字节序。

int size = 14236;
unsigned char bytes[2] = { (size >> 8) & 0xff, size & 0xff };

printf("%x%x", bytes[0], bytes[1]);

Be careful: You need to make sure the two bytes are placed in the array in network order, which if I 'm not mistaken is big endian.

做个少女永远怀春 2024-12-27 03:39:51

因此,您拥有数据包:

unsigned char optionBytes[64];

然后设置 ID 和数据长度:

optionBytes[0] = 13;
optionBytes[1] = 2;

最后,计算值的高字节和低字节:

optionBytes[2] = 14236 / 256;
optionBytes[3] = 14236 % 256;

假设您希望以“big-endian”格式表示数据,较低偏移量上的值是更值得。

So, you have the packet:

unsigned char optionBytes[64];

Then you set the ID and data lengths:

optionBytes[0] = 13;
optionBytes[1] = 2;

And finally, compute the upper and lower bytes of your value:

optionBytes[2] = 14236 / 256;
optionBytes[3] = 14236 % 256;

This assumes you want the data represented in "big-endian" format, with values on lower offsets being worth more.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文