莫因莫因
我想把一个变量指针地址传递给一个函数来获取缓冲区中变量的字节--参见代码片段!这个版本的代码可以工作......但是我想在函数调用之前跳过额外的地址定义。
非常感谢!
float f = 133.2342;
int x = 12345;
byte buffer[8] = {0,0,0,0,0,0,0,0};
void var_to_byte(const int anz, int* var_split, int* buffer)
{
for (int i=0;i<8;i++) buffer[i]=0;
for (int i=0;i<anz;i++)
{
buffer[i]=var_split[i];
}
}
void setup()
{
Serial.begin(115200);
// I like to skip these lines
int z = &f;
int y = &buffer;
// call the function with var_to_byte(sizeof(f),&f,&buffer); is not working
var_to_byte ( sizeof(f),z,y); // this works !!!!
Serial.print("Buffer: ");
for (int i=0;i<8;i++)
{
if (buffer[i]<0x10)
{
Serial.print("0");
}
Serial.print(buffer[i],HEX);
}
Serial.println();
}
void loop() {
// put your main code here, to run repeatedly:
}
我不知道如何解决这个问题...是的,我是新的C++和/或Arduino ...
2条答案
按热度按时间monwx1rj1#
它无法工作,因为类型根本不匹配。
您可以将一个值序列化到现有的缓冲区中,如下所示:
但您也可以避免传入缓冲区:(如果您想避免
std::array
,请参见下文)当然,您可以将
serialise
泛化为任何类型:编辑:
如果你必须避免使用标准库,你也可以传递一个调整大小的raw-array引用:
3pvhb19x2#
代码中的类型没有意义。如果你想填充一个字节缓冲区,那么为什么你的函数说
int* buffer
?那是int
的缓冲区,而不是byte
。简单的方法是使用标准库函数
memcpy
来复制字节,不需要使用自己的函数来完成这个标准任务。memcpy
在头文件<string.h>
中声明