WebAssembly,wasm返回字符串

2021-04-22 08:50:32

参考地址 emscripten、 WebAssembly,传递字符串给c函数


可以用这个方法来实现 wasm AES加密


也可以参考现成的库,来改成自己需要的方法。 aes-wasm

下面看具体的实例。


下面的代码是一个C函数,实现简单的字符串拼接,然后返回拼接的字符串。

#include <stdio.h>#include <string>

 char* EMSCRIPTEN_KEEPALIVE outName(char *n){

 char xhName[] = "xuanhun";
 strcat(n, xhName);
 return n;}


下面使用命令进行编译:

emcc hello.cc -o test2.js


然后在页面中引用:

<script>
        Module = {};
        Module.onRuntimeInitialized = function () {

 var ptr = allocate(
            intArrayFromString("玄魂"),
 'i8',
              ALLOC_NORMAL);

 var retPtr = Module._outName(ptr);

 var resValue = Pointer_stringify(retPtr);
 console.log(resValue);

            _free(ptr);

        }
 </script>
 <script src="test2.js"></script>


上面的代码我们核心部分逐行分析一下:

  var ptr = allocate(intArrayFromString("玄魂"), 
 'i8', ALLOC_NORMAL);


上面的intArrayFromString方法,将字符串转换为UTF8的char数组,然后allocate 方法开辟内存空间存储数据,返回指针。

 var retPtr = Module._outName(ptr);


调用C导出函数,传入字符串指针。

 var resValue = Pointer_stringify(retPtr);


调用Pointer_stringify胶水函数,将c返回的指针转换为字符串。

   _free(ptr);


释放内存。

下面查看下运行结果:




  • 2018-10-30 00:16:41

    android ToolBar 设置颜色

    app:popupTheme——有时候我们有需求:ActionBar文字是白的,ActionBar Overflow弹出的是白底黑字让ActionBar文字是白的,那么对应的theme肯定是Dark。可是让ActionBar弹出的是白底黑字,那么需要Light主题。这时候popupTheme就派上用场了。android:theme 与app:theme——在AppCompat v21里,提供了一个快速方便的方法设置Toolbar的主题,使用app:theme。而新版本22.1.x中,AppCompat 允许对 Toolbar 使用 android:theme代替 app:theme。最好的一点是:它会自动继承父视图的theme ,并且兼容所有APIv11以上的设备。

  • 2018-11-01 22:08:19

    Android Toolbar左、中、右对齐

    默认的Android Toolbar中添加子元素view是从左到右依次添加。需要注意的是,Android Toolbar为自身的NavigationIcon(app:navigationIcon)最靠右,Logo(app:logo)紧接NavigationIcon、Title(app:title)接续Logo、保留了默认的位置(从左边到右)。这些Android Toolbar保留的系统设置字段将挤压开发者自己安放在Toolbar中的子view,如图所示:

  • 2018-11-06 06:42:59

    XUtils3框架数据库的基本使用方法

    今天给大家带来数据库模块的讲解,现在主流的ORM框架很多,比如OrmLite,GreenDao,Active Android,Realm等等,这些框架每个都有自己的优点和缺点,大家完全可以根据自己项目的实际需求进行选择,下面开始进入今天的数据库模块的介绍。