2017-04-11 70 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玩得開心。