`
Meggie_love
  • 浏览: 4030 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

android端调用jni接口和c++交互时产生的编码问题

阅读更多
====编码问题====

编码问题是底层在实现聊天接口的时候发现的,刚发现的情况是android端发送聊天数据,调用JNI sendChatData()接口,传的参数为String,PC-Client接收到的是乱码。

经过一系列研究,发现c++和java的unicode编码存在高低位不同的情况。(一下例子均以unicode作介绍)如:英文字符a在java中为{0,97},而在c++中为{97,0},这样就导致传给c++编码出来的值成为乱码。 另:java中String的getBytes()方法,获取的byte数组,以英文字符a为例,获取的byte值为{-2,-1,0,97},前面会自动补上-2,-1,这个也是java和c++不同的地方,c++不会补这两个值。(这两个值就是指明高地位的顺序的)

得到以上的结论后,接下来就是如何修改了。我对sendChatData接口参数作了修改,原本直接传String改成byte[],并且在传byte[]之前,对相应的byte[]先做处理,然后再传过去

2012.9.4 增加:
下午测了一下ASCII码,在java层收到c++层传过来的byte[],new String(b, "ASCII"),这样得到的String不是乱码。我想编码问题应该是存在在中文编码的转换之间吧
0
1
分享到:
评论

相关推荐

    Qt for Android 用JNI来使C++和Java互调(目前最新版全网只有这个可用)

    研究了很久,也看了Qt on Android,试了很多例子,都不能用(很可能是Qt和Android更新换代太快,很多旧的东西不能用了,所以做了这个例子。

    Java采用JNI调用VC++生成的dll(Java与C++交互)

    Java采用JNI调用VC++生成的dll(Java与C++交互)

    Android项目_jni操作指南.rar

    JNI是Android中Java与本地代码(如C/C++)进行交互的关键技术,它允许开发者利用原生库实现高性能、底层功能等需求。 这份指南内容涵盖了以下几个方面: 1. JNI基本概念及原理:介绍了JNI的基本概念、工作原理以及...

    Cocos2d-x与Android交互(c++与java互调),与IOS交互(c++与objective c混编)

    Cocos2d-x与Android交互(c++与java互调),与IOS交互(c++与objective c混编) 具体的代码请下载这个文件,里面有更详细的jni使用方法,包括传递基本数据类型,返回基本数据类型的值,及类型的转换。

    JNI使用规范详解.pdf

    JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI...

    AndroidStudio_3.0版本JNI开发

    JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以...

    JNI学习示例代码,含java代码工程和win32 dll工程

    JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI...

    JAVA调用C++的dell应用例子

    java与dll交互的技术主要有3种:jni,jawin和jacob。Jni(Java Native Interface)是sun提供的java与系统中的原生方法交互的技术(在windows\linux系统中,实现java与native method互调)。目前只能由c/c++实现。后...

    通熟易懂的JNI教材.ppt

    JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以...

    JNI规范,c和java的融合接口

    JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native ...JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

    android-ndk-r10(eclipse下用亲测)

    android jni开发,eclipse环境下调用C++(cpp)文件,Android和C++交互

    java调用dll或so库示例

    完整演示使用JNI开发JAVA和C++交互的例子,本示例提供了在Windows和linux上的编译脚本。请参考JNI的相关文章,如有疑问可留言

    cmake跨平台sdk开发和Jni 接口设计及应用

    1:cmake 跨平台sdk 开发快速入门...2:java的jni 技术,java 和c/c++ 的数据交互(包括基本类型和数组类型和类的相互传递)和相互调用 3:学会写java测试demo, 以及学会写安卓测试demo,测试自己所写的sdk 能否调用正常

    hello-jni.tgz

    JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以...

    JNI技术在网络交互中的应用

    Android是一款运行在开放的Linux内核之上的操作系统,其上层应用程序采用Java开发语言,底层核心类库采用C/C++语言编写,开发者能够非常便捷的使用Android SDK调用丰富的API,实现各种功能。不仅如此,Android还支持...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版 原书名:Pro Android C++ with the NDK 原出版社: Apress 作者: (美)Onur Cinar 译者: 于红 佘建伟 冯艳红 丛书名: 移动开发...

    HelloJni:Jni演示

    Jni(Java Native Interface )其实是Java平台与C/C++及其他语言交互的接口,基于Android SDK开发的应用用的事java语言,自然可以通过Jni调用C/C++代码满足一些特殊需求。 为了便于提高安卓平台JNI开发模式,...

    JniSample.rar

    android硬件开发经常需要使用jni的方式和C,C++层进行数据交互,demo部分总结了常见的一些复杂数据交互例子,包括常见的基本数据类型的传递以及复杂的对象互传,List集合互传,C++端主动调用java方法等。欢迎使用参考

    C/C++和Java的交互详解

    本文旨在简单的介绍一下如何让java层和C/C++层相互调用,这里主要是使用了JNI技术,并没有深究其原理,只是做了个实现,其目的是为后面的学习打开一扇窗。

    JNI实用手册

    JNI:Java Native ...JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。本文既适合初学者了解如何进行JNI开发,也适合开发者作为一部参考手册

Global site tag (gtag.js) - Google Analytics