我有一个解析一些传入串行数据的类。解析后,方法应返回带有一些已解析数据的字节数组。传入的数据长度未知,因此我的返回数组将始终不同。
到目前为止,我的方法分配的数组大于我需要返回的数组,并用我的数据字节填充它,并保留一个索引,以便我知道我在字节数组中放入了多少数据。我的问题是我不知道如何从实例方法中返回它。
void HEXParser::getParsedData()
{
byte data[HEX_PARSER_MAX_DATA_SIZE];
int dataIndex = 0;
// fetch data, do stuff
// etc, etc...
data[dataIndex] = incomingByte;
_dataIndex++;
// At the very end of the method I know that all the bytes I need to return
// are stored in data, and the data size is dataIndex - 1
}
在其他语言中,这是微不足道的,但我对C ++并不十分精通,而且我完全陷入困境。
谢谢!
答案 0 :(得分:2)
您正在使用只需一点RAM的微控制器。您需要仔细评估“未知长度”是否也意味着无限长度。你不能处理无限长度。您可靠操作的最佳方法是使用固定缓冲区设置最大尺寸。
此类操作的常见模式是将缓冲区传递给函数,并返回已使用的内容。那么你的函数看起来很像C字符串函数:
const size_t HEX_PARSER_MAX_DATA_SIZE = 20;
byte data[HEX_PARSER_MAX_DATA_SIZE];
n = oHexP.getParsedData(data, HEX_PARSER_MAX_DATA_SIZE);
int HEXParser::getParsedData(byte* data, size_t sizeData)
{
int dataIndex = 0;
// fetch data, do stuff
// etc, etc...
data[dataIndex] = incomingByte;
dataIndex++;
if (dataIndex >= sizeData) {
// stop
}
// At the very end of the method I know that all the bytes I need to return
// are stored in data, and the data size is dataIndex - 1
return dataIndex;
}