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

时间:2019-07-15 19:25:27

标签: c# c++ unity3d udp

我需要通过UDP将两个INT16值作为4字节发送给Unity。 当我使用数据包发件人并发送HEX时,例如“ f1 ff 0f 00”,Unity按预期将各自的HEX转换回Unity中的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格式)。不幸的是,这些十六进制格式都以%x数组的形式出现,而上述的boost send方法不接受。

我试图向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收到的数据正确吗? 我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您会在文本和十六进制之间感到困惑。

这是文本"F1FF0F00",而不是十六进制。

这是十六进制

uint8_t udp_data[4] = { 0xF1, 0xFF, 0x0F, 0x00 };