2014-01-05 91 views
1

我想将一个整数或浮点数转换为一个特定的形式(编程mbed,微控制器)的字符数组。C + + int或浮点数到字符阵

的整数应该是32位的big-endian补整数 花车应该是32位大端IEEE 754浮点数

试了几件事情:

uint8_t *v; 
uint8_t valuePos = 3; 
v = (uint8_t *)datum->data.i; //I get the int or float from datum->data.i 
buff[lengthEnd++] = v[valuePos--]; //buff is the char array 
buff[lengthEnd++] = v[valuePos--]; 
buff[lengthEnd++] = v[valuePos--]; 
buff[lengthEnd++] = v[valuePos]; 

uint32_t i = BigEndian(datum->data.i); 
uint8_t * ptr = (uint8_t *) &i; 
strcat(buff, (char *) ptr); //maybe strcat isn't a good function to use here 
lengthEnd += 4; 

但我不能让它工作,我总是得到一些其他的数字。出了什么问题?

+0

嗨,第一个例子在另一个OSC类的以前的适应工作。现在重做整个事情,现在它的值为2015428624而不是123. 代码的第二部分来自另一个arduino的OSC类,但不是strcat而是使用p.write(....)。 看看stringstream我可以如何使用它: – Jannes

+0

@ H2CO3:他说他认为整数是以十进制存储的? –

+0

@LightnessRacesinOrbit他没有。它来自'strcat(buff,(char *)ptr);'。 – 2014-01-05 16:42:03

回答

2

看起来你错过了&运营商。
请试试这个:

v=(uint8_t *)&datum->data.i; 

,从不使用strcat二进制数据。这是为了字符串。二进制数据应该用类似memcpy的东西来处理。

+0

这就是诀窍:)过于关注它下面的部分。非常感谢你!适用于整数和浮点数!好吧,我会记得使用memcpy作为二进制数据。 – Jannes