我需要通过 UDP 将两个 INT16 值作为 4 个字节发送到 Unity。 当我使用数据包发送器并发送十六进制时,例如“f1 ff 0f 00”,Unity 在 Unity 中按预期将相应的 HEX 转换回 INT。
但是,我无法在 C++ 中使用它。
我可以按如下方式从我的 C++ 代码发送数据:
boost::asio::io_service io_service;
udp_send client(io_service, "127.0.0.1", "8052");
client.send("F1FF0F00");
我还能够在 C++ 中创建正确的 HEX 格式,表示一个 HEX 整数(%x 格式)。不幸的是,这些 HEX 格式都是以 %x 数组的形式出现的,上面的 boost 发送方法不接受它。
我尝试将各种字符串发送到 Unity - 但是,Unity 接收到的数据没有被正确解释 - 因此我的转换没有按需要进行。
下面是 C# 中的一个例程,它可以完成我正在寻找的任务。出于我的目的,我需要 C++ 中的类似内容:
//empty UDP buffer
byte[] UDP_Data = new byte[8];
//add steering data to buffer
Int16 twobytes = (Int16)(15);
byte[] intBytes = BitConverter.GetBytes(twobytes);
UDP_Data[0] = intBytes[0];
UDP_Data[1] = intBytes[1];
//add speed data to buffer
twobytes = (Int16)(-15);
intBytes = BitConverter.GetBytes(twobytes);
UDP_Data[0] = intBytes[0];
UDP_Data[1] = intBytes[1];
// send via UDP
client.Send(UDP_Data, UDP_Data.Length, ep)
有谁知道如何用C++重写与上述C#类似的代码,使Unity接收到的数据正确无误? 非常感谢任何帮助。
最佳答案
您对文本和十六进制感到困惑。
这是文本 "F1FF0F00"
而不是十六进制。
这是十六进制
uint8_t udp_data[4] = { 0xF1, 0xFF, 0x0F, 0x00 };
关于c# - 如何在 C++ 中将整数转换为字节,以便 Unity 在通过 UDP 传输后可以理解它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046046/