`
Meggie_love
  • 浏览: 4282 次
  • 性别: 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
分享到:
评论

相关推荐

    Android调用JNI接口使用C++动态库进行AES256位加密

    JNI是Java平台的标准接口,允许Java代码和其他语言写的代码进行交互。在Android环境中,JNI通常用于提升性能,如加密、图像处理或物理模拟等计算密集型任务。 要实现Android调用C++动态库进行AES256加密,我们需要...

    C++库封装JNI接口-实现java调用c++

    在跨平台的软件开发中,有时我们需要在Java和C++之间进行交互,这通常是由于性能需求、使用已有的C++库或特定硬件接口的原因。Java Native Interface (JNI) 是Java平台提供的一种机制,允许Java代码和其他语言写的...

    android 使用jni调用c++

    在Android开发中,JNI(Java Native Interface)是一个关键特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如利用C++的高性能处理图像、音频或者进行复杂的数学运算,以及接入原生...

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

    "Qt for Android 用JNI来使C++和Java互调"的主题揭示了如何利用JNI(Java Native Interface)技术在Qt与Android原生系统之间建立桥梁,实现两者的交互。以下将详细介绍这一过程。 首先,Qt for Android是Qt项目的一...

    Java使用jni接口调用C++动态库.docx

    Java 通过使用 JNI(Java Native Interface)接口可以调用 C++ 动态库,该技术可以大大扩展 Java 的能力,让 Java 应用程序可以与其他语言编写的程序进行交互。下面是 Java 使用 JNI 接口调用 C++ 动态库的详细步骤...

    Androidstudio调用jni的示例

    这个“Androidstudio调用jni的示例”是一个基础教程,旨在帮助初学者理解如何在Android Studio项目中使用JNI来调用本地C/C++代码。下面将详细介绍这个示例中的关键步骤和涉及的知识点。 1. **创建JNI接口** 在Java...

    Android JNI 断点调试C++

    通过这个简单的测试项目"HelloNDK",初学者可以快速了解Android JNI环境的搭建,学习如何在Java和C++之间进行交互,并掌握使用Android Studio进行C++代码断点调试的基本技巧。这不仅有助于深入理解Android应用的内部...

    Android中调用JNI例子

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下被使用,如优化性能、使用硬件特性、调用C/C++库等。本示例将详细介绍如何在Android...

    Android通过JNI调用.so动态库

    通过 JNI,我们可以在 Android 项目中调用.so 动态库中的 C/C++ 方法,实现与 native 代码的交互。 首先,我们需要在 Eclipse 中创建一个 Android 项目,并在项目中创建一个 Java 类,例如 TestJNI.java。这个类中...

    Android-JNI完整工程,实现c++调用java和java调用c++

    Android-JNI,全称为Java Native Interface,是一种技术,允许Java代码和其他语言编写的代码进行交互。这个完整工程展示了如何在Android应用中使用JNI,实现C++与Java之间的双向调用。这种技术在需要高效计算、利用...

    Android使用JNI调用Python so解释器

    在Android平台上,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。JNI在许多场景下被广泛使用,例如优化性能、访问特定硬件功能或利用已有的C/C++库。在这个特殊的场景中,我们...

    《Android:JNI调用C++自定义类的详细方法》源码

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如利用C/C++的高效性能处理密集计算或者利用现有的C库。本篇将详细介绍...

    安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar

    这个压缩包“安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar”似乎包含了一个示例项目,展示了如何在Android应用中使用JNI来实现串口、Socket通信以及USB驱动的交互。以下将详细介绍这些知识点。 1. *...

    Android下JNI和HAL技术

    Java Native Interface(JNI)是Java平台提供的一套编程接口,允许Java代码和其他语言(主要是C和C++)编写的代码或库进行交互。在Android系统中,JNI扮演着非常重要的角色,因为它使得Java应用程序能够与底层Linux...

    C++调用Android函数工程

    在IT行业中,跨平台开发是常见...总之,C++调用Android函数工程涉及到的技术点包括JNI接口定义、C++代码实现、本地库构建以及在Java层的调用。理解这些知识点,能帮助开发者在Android应用中灵活运用C++,提升应用性能。

    android jni调用jni 方法

    Android JNI(Java Native Interface)是Android系统提供的一种技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中的应用广泛,特别是在需要高性能计算、访问特定硬件功能或利用已有的C/C++库时。...

    Qt调用Jni接口获取Android相册图片列表

    总结,通过Qt调用JNI接口获取Android相册图片列表,涉及的关键步骤包括设置Qt项目、创建JNI接口、生成和实现JNI函数、注册函数以及在Qt中调用。这使得开发者能够利用Qt的便利性,同时充分利用Android系统的原生功能...

    Android13 增加 APP->JNI ->HAL

    在Android系统中,APP(应用程序)与硬件交互通常通过JNI(Java Native Interface)和HAL(Hardware Abstraction Layer)层来实现。随着Android13的发布,这个交互过程得到了进一步优化和增强,使得APP能更高效、...

    Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    这篇“Android学习笔记——利用JNI技术在Android中调用、调试C++代码”将带你深入理解如何在Android应用中使用JNI来调用C++代码,以及如何进行调试。以下是对这一主题的详细阐述。 1. **JNI简介** JNI是Java平台的...

    android jni 调用本地函数 c++ 格式

    - 跨线程调用JNI函数需谨慎,可能需要同步原生和Java线程。 - 考虑到性能,尽量减少JNI调用次数,避免大量数据在Java和C++间来回传递。 11. **CMake构建** 对于使用CMake构建的项目,`CMakeLists.txt`文件会定义...

Global site tag (gtag.js) - Google Analytics