将 int 14236 转换为十六进制 379C 作为 C++ 中的 char[37,9C]
背景
我正在创建一个简单的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
它可能需要采用网络字节顺序。如果是这样,那么您可以使用
htons
。如果你想在后两个字节中使用它: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:您可以使用此代码:
You can use this code:
小心:您需要确保两个字节按网络顺序放置在数组中,如果我没有记错的话,这是大端字节序。
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.
因此,您拥有数据包:
然后设置 ID 和数据长度:
最后,计算值的高字节和低字节:
假设您希望以“big-endian”格式表示数据,较低偏移量上的值是更值得。
So, you have the packet:
Then you set the ID and data lengths:
And finally, compute the upper and lower bytes of your value:
This assumes you want the data represented in "big-endian" format, with values on lower offsets being worth more.