2017-04-11 72 views
-1

我将如何转换下面的C代码到JNI C代码:转换C代码进入JNI C代码

UT_STATIC JsonResult PublishGps(GPS_VARS * vars) 
{ 
    JsonResult result; 
    JsonBuilderData jsonBuilderData; 

    #define METERS_SECOND_TO_MPH 2.236936 

    memset(m_GpsJsonBuffer, 0,GPS_JSON_BUFFER_SIZE); 

    InitJsonBuilder(&jsonBuilderData, m_GpsJsonCache, GPS_JSON_CACHE_SIZE, m_GpsJsonBuffer, GPS_JSON_BUFFER_SIZE); 


    uint32_t myTest = (uint32_t) vars->rawGps.time; 

    (void) PutJsonDateTime(myTest, FIELD(AMERIGO_TIMESTAMP_NAME)); 

    (void) PutJsonLong((int32_t) myTest, FIELD(AMERIGO_EPOCH_NAME)); 

    (void) PutJsonString(vars->dsn, FIELD(AMERIGO_DSN_NAME)); 

    if (vars->rawGps.mode == 3) 
    { (void) PutJsonString("good", FIELD(AMERIGO_QUALITY_NAME)); } 
    else 
    { 
     { (void) PutJsonString("none", FIELD(AMERIGO_QUALITY_NAME)); } 
    } 

    (void) PutJsonDouble(AMERIGO_PREC,(float64_t) vars->rawGps.lat, FIELD(AMERIGO_LAT_NAME)); 

    (void) PutJsonDouble(AMERIGO_PREC, (float64_t) vars->rawGps.lon, FIELD(AMERIGO_LON_NAME)); 

    float64_t speedMph = (float64_t) vars->rawGps.speed * METERS_SECOND_TO_MPH; 
    (void) PutJsonDouble(AMERIGO_PREC_SPEED, (float64_t) speedMph,FIELD(AMERIGO_SPEED_NAME)); 

    int32_t heading = (int32_t)vars->rawGps.track; 
    (void) PutJsonLong(heading, FIELD(AMERIGO_HEADING_NAME)); 

    result = BuildJson(vars->gpsPayLoadBuffer, GPS_PAYLOAD_STRING_SIZE); 

    vars->payloadSize = strlen(vars->gpsPayLoadBuffer); 

    if (result != jsonSuccess) { ERROR("%s json error %s", __FUNCTION__, JsonStrerr(result)); } 

    //reschedule 
    vars->nextDrop = vars->dropPeriod + vars->currentTick; 

    return result; 
} 

我想知道什么,我会在JsonResult数据类型转换成?它应该是jstringjint等。JNI代码用于JSON字符串或JSON对象的是什么?任何帮助将不胜感激。

+0

发布旧代码和新代码。这表明努力。这将有助于解决您的问题,但不会为您转换。 – KevinDTimm

+1

JSON是一种文本格式。构建一个JSON数据结构,将其序列化为一个C/C++字符串,并将其转换为一个JNI jstring。更大的问题是你如何通过GPS_VARS参数。 –

回答

1

到这里看看:

https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo021

你有,你有JNI包装,调用同一个共享库的另一个功能的示例代码。

你想要做的是:

  • 把你的数据(在Java中),并把它传递给JNI封装(很可能是通过对象序列化的字符串,等等)
  • 包装代码内(JNI)你要创建自己的数据结构 - GPS_VARS
  • 你想获得之后将它传递给你的函数
  • JSON回要将其序列化到字符串,返回到Java

您可以通过有关字符串来回Java和JNI这里之间的样本来看一看:

http://jnicookbook.owsiak.org/recipe-No-009/ http://jnicookbook.owsiak.org/recipe-No-010/

我希望这有助于。与JNI玩得开心。