c# - 如何在 C++ 中将整数转换为字节,以便 Unity 在通过 UDP 传输后可以理解它们

标签 c# c++ unity3d udp

我需要通过 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/

相关文章:

c# - 为什么将颜色更改为黄色而不以编程方式统一使用 sprite Renderer?

C++ 作用域变量重新排序和计时器

c++ - 在非阻塞模式下在 TThread 中使用 TClientSocket 时不会触发 OnConnect 事件

c++ - C++ 中的模拟和依赖注入(inject)

c# - 文本文件分隔 - 性能问题

unity3d - 通过脚本设置层次过滤器

c# - Unity 广告无法在真实设备上运行

c# - 为什么我无法访问属于不同类型成员的事件的成员?

c# - SSDT 数据库项目与 SonarQube 的代码分析集成

c# - 对于 .Net Native C# 应用程序,无法通过 WACK 测试并避免 ILT005 错误