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

How to convert Integers to Byte in C++ so that Unity can understand them after transfer via UDP

本文关键字:传输 UDP 以便 C++ 整数 转换 字节 Unity      更新时间:2023-10-16

我需要通过UDP将两个INT16值作为4个字节发送到Unity。当我使用数据包发送器并发送十六进制(例如"f1 ff 0f 00"(时,Unity 会按预期在 Unity 中将各自的十六进制转换回 INT。

但是,我不能让这在C++工作。

我可以从我的C++代码发送数据,如下所示:

boost::asio::io_service io_service;
udp_send client(io_service, "127.0.0.1", "8052");
client.send("F1FF0F00");

我还能够在C++中创建正确的十六进制格式,表示十六进制整数(%x 格式(。不幸的是,这些十六进制格式都是 %x 的数组,上面的提升发送方法不接受这些数组。

我尝试将各种字符串发送到 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 };