Android 将字符解析为向量<;浮动>;用于弓形设置VMDetector(矢量<;浮点>;)

Android 将字符解析为向量<;浮动>;用于弓形设置VMDetector(矢量<;浮点>;),android,c++,opencv,Android,C++,Opencv,我在JNI Android应用程序中解析char中的float时遇到问题。这是我的示例数据: 0.00618567 0.00224441 0.002006603 0.001813437 0.003761207 -0.001850192 -0.001011893 -0.00342476 0.003790586 0.002385935 0.002647488 0.004411637 0.005938921 0.00698391 0.004522655 0.001524881 -0.002673242

我在JNI Android应用程序中解析char中的float时遇到问题。这是我的示例数据:

0.00618567 0.00224441 0.002006603 0.001813437 0.003761207 -0.001850192 -0.001011893 -0.00342476 0.003790586 0.002385935 0.002647488 0.004411637 0.005938921 0.00698391 0.004522655 0.001524881 -0.002673242 -0.0002569943 -0.002495839 0.00230171 0.000844161 0.006387557 0.008135659 0.005583601 0.002238941 -0.001932641 -0.003518643 -0.0006784072 0.001636732 0.001213515 0.0021472 0.004911256 0.003613603 0.001362842 -0.0002172031 -0.002115535 -0.0002000824 0.001085831 0.003149634 0.003899722 0.004865647 0.002436467 0.0001896242 -0.001678405 -0.001909177 -0.002954236 0.001802054 0.003751467 0.004150682 0.005844797 0.002612064 0.003680898 -0.0005450704 -0.002621638 -0.002253087 0.0005009398 0.004602027 0.003445318 0.00632045 0.002706638 -0.001308871 -0.002082631 -0.001821213 -0.0005696003 0.002069579 0.006264412 0.004593662 0.005836432 0.0009420562 -0.003753015 -0.004050847 -0.001744672 -0.002664186 0.00101941 0.004568859 0.003175343 0.005315124
这是一种数据
向量
的类型,用于
hog.setsvmtector(const vector&detector)

这是我在JNI中的示例代码
.cpp

extern "C"
jboolean
Java_com_example_franksyesipangkar_tourguide_CameraPreview_ImageProcessing
(JNIEnv* env, jobject thiz, jint width, jint height, jbyteArray NV21FrameData, jintArray outPixels, jbyteArray b)

{

LOGD("JNIEnv");

    //convert jbyteArray to char
    jbyte *cmd = env->GetByteArrayElements(b, 0);
    LOGD("JNIEnvFeature");

    //char * feature = (char *)cmd;

    char feature[90600];
    memset(feature,0, sizeof(feature));
    memcpy(feature, cmd, strlen((char*)cmd));

在这段代码中,一个字符中的数据功能,我想将其解析为数据类型,如hog.setsvmtodector(const vector&detector)
。那么,您有什么想法吗?

也许这可以帮助您:

#include <iostream>
#include <vector>
#include <strstream>
#include <string>


std::vector<float> parse_delimeted_list_of_numbers(char* line, char delimeter)
{
    std::vector<float> vector_of_numbers;
    std::istrstream input_stream(line);
    std::string text;
    float number;
    while (std::getline(input_stream, text, delimeter)) {
        sscanf_s(text.c_str(), "%f", &number, text.size());
        vector_of_numbers.push_back(number);
    }
    return vector_of_numbers;
}

// A program to test that the above function works well
int _tmain(int argc, _TCHAR* argv[])
{
//  auto vector_of_numbers = parse_delimeted_list_of_numbers("234.0, 345, 465, 46456.0",',');
    auto vector_of_numbers = parse_delimeted_list_of_numbers("234.0 34 465 46456.0", ' ');
    for (auto number : vector_of_numbers)
        std::cout << number << "\n";
    return 0;
}
#包括
#包括
#包括
#包括
std::向量解析数据表数据表(字符*行,字符数据表)
{
std::向量的向量;
std::istrstream输入_流(行);
std::字符串文本;
浮点数;
while(std::getline(输入\流、文本、delimeter)){
sscanf_s(text.c_str(),%f“,&number,text.size());
向量数。推回(数);
}
_数的返回向量_;
}
//一个测试上述功能是否正常工作的程序
int _tmain(int argc,_TCHAR*argv[]
{
//数字的自动向量=数字的解析列表(“234.0345465456.0”,“,”);
数字的自动向量=数字的解析列表(“234.0 34 465 46456.0”);
用于(自动编号:矢量编号)

std::cout所以你需要一种方法来获取“feature”字符串中的数字,并将它们推到std::vector中?Allright@AdiLevin..不仅推送它们,而且在空格之前生成数据,如数据所具有的
vector
int\tmain(int argc,\TCHAR*argv[]){}
?@adi levins\u tmail部分只是一个测试程序,用于测试函数是否正常工作。您不需要它。哦@adi levin..什么是函数char delimeter?函数parse\u delimeterd\u list\u of_numbers以两个参数作为输入:文本格式的数字序列(我将其命名为“line”),以及一个指定用作两个数字分隔符的字符的单个字符,在本例中,它是空格字符“”。哦…好的@adi levin,我只需查看
自动向量的数字=解析的数字列表的数字(“234.0 34 465 46456.0”,”;
,以使用此函数。。。
#include <iostream>
#include <vector>
#include <strstream>
#include <string>


std::vector<float> parse_delimeted_list_of_numbers(char* line, char delimeter)
{
    std::vector<float> vector_of_numbers;
    std::istrstream input_stream(line);
    std::string text;
    float number;
    while (std::getline(input_stream, text, delimeter)) {
        sscanf_s(text.c_str(), "%f", &number, text.size());
        vector_of_numbers.push_back(number);
    }
    return vector_of_numbers;
}

// A program to test that the above function works well
int _tmain(int argc, _TCHAR* argv[])
{
//  auto vector_of_numbers = parse_delimeted_list_of_numbers("234.0, 345, 465, 46456.0",',');
    auto vector_of_numbers = parse_delimeted_list_of_numbers("234.0 34 465 46456.0", ' ');
    for (auto number : vector_of_numbers)
        std::cout << number << "\n";
    return 0;
}