Electron使用WebAssembly實現CRC-32 原理校驗

Electron使用WebAssembly實現CRC-32 原理校驗

將C/C++語言代碼,經由WebAssembly編譯為庫函數,可以在JS語言環境進行調用。這里介紹在Electron工具環境使用WebAssembly調用CRC-32 原理格式校驗的方式。

CRC-32 原理校驗函數WebAssembly源文件

C語言實現CRC-32 原理格式校驗的介紹見:《C語言標準CRC-32校驗函數》

選擇上面介紹文章中的uint32_t PY_CRC_32_T8(uint8_t *di, uint32_t len)校驗函數,建立一個新文件PY_CRC_32_T8.cc:

#ifndef EM_PORT_API
#	if defined(__EMSCRIPTEN__)
#		include <emscripten.h>
#		if defined(__cplusplus)
#			define EM_PORT_API(rettype) extern "C" rettype EMSCRIPTEN_KEEPALIVE
#		else
#			define EM_PORT_API(rettype) rettype EMSCRIPTEN_KEEPALIVE
#		endif
#	else
#		if defined(__cplusplus)
#			define EM_PORT_API(rettype) extern "C" rettype
#		else
#			define EM_PORT_API(rettype) rettype
#		endif
#	endif
#endif#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>EM_PORT_API(void *) mymalloc(uint32_t size) {return malloc(size);
}EM_PORT_API(void) myfree(void * ptr) {free(ptr);
}EM_PORT_API(uint32_t) PY_CRC_32_T8(uint8_t *di, uint32_t len)
{uint32_t crc_poly = 0x04C11DB7;  //X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+1 total 32 effective bits without X^32.uint32_t data_t = 0; //CRC registerfor(uint32_t i = 0; i < len; i++){data_t ^= di[i]<<24; //8-bit datafor (uint8_t j = 0; j < 8; j++){if (data_t & 0x80000000)data_t = (data_t << 1) ^ crc_poly;elsedata_t <<= 1;}}return (data_t);
}

這個文件有三個函數導出,前兩個是獲取和釋放內存的函數,后一個就是CRC-32 原理校驗函數的導出。

將這個文件進行WebAssembly編譯,就會得到兩個庫文件:
在這里插入圖片描述

將這幾個文件拷貝到后面建立的Electron工程目錄,再進行調用。

Electron調用WebAssembly CRC-32 原理函數演示源文件

下載Electron的Hello World!例程,并實現正常運行:
在這里插入圖片描述

然后將前面的3個WebAssembly相關文件,放到例程根目錄。再引入一個jQuery庫。編寫index.html文件如下:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><link href="./styles.css" rel="stylesheet"><title>Hello World!</title><script>window.$ = window.jQuery = require('./js/jquery-3.3.1.min.js');</script></head><script src="PY_CRC_32_T8.js"></script><script src="./mainprocess.js"></script>  <body><h1>Hello World!</h1>We are using Node.js <span id="node-version"></span>,Chromium <span id="chrome-version"></span>,and Electron <span id="electron-version"></span>.<!-- You can also require other files to run in this process --><script src="./renderer.js"></script></body>
</html>

主要修改部分為引入了jQuery,引入了PY_CRC_32_T8.js以及引入了mainprocess.js,mainprocess.js是在例程根目錄下新建的工程文件,內容如下:

// This file is required by the index.html file and will
// be executed in the renderer process for that window.
// All of the Node.js APIs are available in this process.//增加當前運行狀態和當前運行進程/函數信息,控制不產生誤觸發
window.name="mainwindow";   $(document).ready(function(){Module.onRuntimeInitialized = function() {console.log(Module);}setTimeout(function(){var count = 8;var ptr = Module._mymalloc(count);for (var i = 0; i < count; i++){Module.HEAP8[ptr + i] = 1+i;}console.log(Module._PY_CRC_32_T8(ptr, count));Module._myfree(ptr);},2000);   //Delay is a must for Module initialized! });process.on('uncaughtException', function (){});

mainprocess.js實現了WebAssembly庫文件的導入和使用,Module._mymalloc用于申請內存空間,Module._myfree用于釋放內存空間,Module.HEAP8[ptr + i] = 1+i;用于給申請到的內存空間從1開始賦值,這里堆空間為8個字節,因此賦值從1到8。Module._PY_CRC_32_T8(ptr, count)則進行CRC-32 原理校驗函數的調用,提供了內存指針和要校驗的字節數量。

整個Electron工程環境的文件如下所示:
在這里插入圖片描述

Electron調用WebAssembly CRC-32 原理函數演示效果

通過在控制臺輸入 npm start執行Electron工程,打開console顯示:
在這里插入圖片描述

2098148993是打印出的CRC校驗結果,十六進制值為0x7D0F3681。

Electron使用WebAssembly實現CRC-32 原理校驗演示工程下載

Electron Demo工程下載,包含已編譯后的WebAssembly庫文件:
在這里插入圖片描述

–End–

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80247.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80247.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【晶振】晶振的工作原理及其與單片機關系

晶振(晶體振蕩器)是電子設備中常見的元件,其核心功能是提供穩定的時鐘信號,而單片機(MCU)依賴這一信號來同步內部操作。以下是晶振的工作原理及其與單片機關系的詳細說明: 一、晶振的工作原理 壓電效應與諧振 晶振的核心是石英晶體,利用其壓電效應: 當在晶體兩端施加電…

【Oracle專欄】函數中SQL拼接參數 報錯處理

Oracle相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 1.背景 最近同事反饋了一個很奇怪的問題,即有一個函數,入參是當前年月,主要作用是通過SQL語句將不合規的數據插入到指定表中,插入數據時帶上入參的年月參數。當前問題:單獨測試SQL沒有問題可以執行成功,…

nodejs之Express-介紹、路由

五、Express 1、express 介紹 express 是一個基于 Node.js 平臺的極簡、靈活的 WEB 應用開發框架,官方網址: https://www.expressjs.com.cn/ 簡單來說,express 是一個封裝好的工具包,封裝了很多功能,便于我們開發 WEB 應用(HTTP 服務) (1)基本使用 第一步:初始化項目并…

Unicode和 ASCII碼以及UTF-8編碼的區別和聯系

Unicode、ASCII 和 UTF-8 是計算機編碼領域的關鍵概念&#xff0c;它們既有聯系又有區別。以下是它們的對比分析&#xff1a; 1. ASCII&#xff08;美國信息交換標準碼&#xff09; 誕生時間&#xff1a;1967 年&#xff08;7 位編碼&#xff0c;共 128 字符&#xff09;。特點…

STM32F103_HAL庫+寄存器學習筆記20 - CAN發送中斷+ringbuffer + CAN空閑接收中斷+接收所有CAN報文+ringbuffer

導言 如上所示&#xff0c;在[[STM32F103_HAL庫寄存器學習筆記19 - CAN發送中斷CAN接收中斷接收所有CAN報文ringbuffer數據結構]]的基礎上&#xff0c;為CAN發送端也引入了ringbuffer&#xff08;環形緩沖區&#xff09;機制。CAN發送有三個發送郵箱&#xff0c;為什么還另外需…

Windows 環境下安裝 MariaDB 及 HeidiSQL 使用教程

引言 本報告旨在提供一份詳盡的操作指南。內容將覆蓋在 Windows 操作系統上安裝 MariaDB Community Server 的全過程。我們還將探討如何利用 HeidiSQL 這款圖形用戶界面&#xff08;GUI&#xff09;工具&#xff0c;直觀地預覽和管理我們新安裝的數據庫。除了安裝與配置的步驟…

美團2024年春招第一場筆試 C++

目錄 1&#xff0c;小美的平衡矩陣 2&#xff0c;小美的數組詢問 3&#xff0c;小美的MT 4&#xff0c;小美的朋友關系 1&#xff0c;小美的平衡矩陣 【題目描述】 給定一個n*n的矩陣&#xff0c;該矩陣只包含數字0和1。對于 每個i(1<i<n)&#xff0c;求在該矩陣中&am…

09-DevOps-Jenkins實現CI持續集成

前面已經把harbor搭建好了&#xff0c;也可以向harbor中推送自定義鏡像。 原計劃是在Jenkins這臺服務器上&#xff0c;完成鏡像構建&#xff0c;然后把鏡像推送的harbor倉庫中。現在改變計劃了&#xff0c;Jenkins所在的服務器&#xff08;192.168.1.10&#xff09;不負責鏡像…

Postman設置了Cookies但是請求不攜帶Cookie

1 問題說明 使用Postman工具往往要向本地服務器發送請求攜帶Cookie便于測試接口&#xff0c;但是在Send下面的Cookies選項中設置域名127.0.0.1&#xff0c;并添加Cookie&#xff0c;發現發送的請求怎么都不會攜帶Cookie&#xff1a; 通過Fiddler抓包發現并沒有Cookie&#xff1…

【unity】Vulkan模式下部分Android機型使用VideoPlayer組件播放視頻異常問題

一、問題背景 考慮到Vulkan高性能的優勢&#xff0c;項目組決定打包設置為vulkan優先&#xff0c;opengl es次之的方案&#xff1b;但由于部分低端設備或者部分模擬器對Vulkan的兼容性良莠不齊&#xff0c;導致諸如使用VideoPlayer組件無法正常播放視頻等問題頻發&#xff0c;而…

0802api設計和實戰-網絡ajax請求1-react-仿低代碼平臺項目

文章目錄 1 API設計1.1 用戶功能1.1.1 獲取用戶信息1.1.2 注冊1.1.3 登錄 1.2 問卷功能1.2.1 獲取單個問卷1.2.2 獲取問卷列表1.2.3 創建問卷1.2.4 更新問卷1.2.5 批量徹底刪除問卷1.2.6 復制問卷 1.3 小結 2 實戰2.1配置axios2.2 封裝API和測試2.3 新建問卷2.4 自定義hooks封裝…

Android Kotlin AIDL 完整實現與優化指南

本文將詳細介紹如何在Android中使用Kotlin實現AIDL&#xff08;Android Interface Definition Language&#xff09;&#xff0c;并提供多種優化方案。 一、基礎實現 1. 創建AIDL文件 在src/main/aidl/com/example/myapplication/目錄下創建&#xff1a; IMyAidlInterface.…

【數據結構】_棧和隊列相關面試題

&#x1f525; 數據結構修煉場 &#x1f525; &#x1f4a5; 棧與隊列 終極試煉 &#x1f4a5; &#x1f680; 理論已加載完畢&#xff0c;代碼之魂覺醒時刻&#xff01; ?? 是時候用實戰點燃你的算法之力了—— 「題目風暴&#xff0c;來襲&#xff01;」 &#xff08;握…

精益數據分析(8/126):從Airbnb案例看精益創業與數據驅動增長

精益數據分析&#xff08;8/126&#xff09;&#xff1a;從Airbnb案例看精益創業與數據驅動增長 大家好&#xff01;一直以來&#xff0c;我都堅信在創業和技術的領域里&#xff0c;持續學習與分享是不斷進步的關鍵。今天&#xff0c;咱們繼續深入學習《精益數據分析》&#x…

專題二十:路由策略與策略路由

一、路由策略 1.1 路由策略的概念 路由策略是通過修改路由表的路由條目來控制數據流量的可達性。即對接受和發布的路由進過濾。這種方式稱為路由策略 路由策略功能相關作用控制路由的發布可通過路由策略對所要發布的路由信息進行過濾&#xff0c;只允許發布滿足條件的路由信…

VSCode 擴展離線下載方法

學習自該文章&#xff0c;感謝作者&#xff01; 2025 年 VSCode 插件離線下載攻略&#xff1a;官方渠道一鍵獲取 - 知乎 獲取擴展關鍵信息 方法一&#xff1a;官網獲取 打開 VSCode 擴展官方網站 搜索要下載的擴展&#xff0c;以 CodeGeeX 為例&#xff0c;網址為&#xf…

一 、環境的安裝 Anaconda + Pycharm + PaddlePaddle

《從零到一實踐&#xff1a;系統性學習生成式 AI(NLP)》 一 、環境的安裝 Anaconda Pycharm PaddlePaddle 1. Anaconda 軟件安裝 Anaconda 軟件安裝有大量的教程&#xff0c;此處不在說明&#xff0c;安裝完成之后界面如下&#xff1a; 2. 創建 Anaconda 虛擬環境 Paddl…

軟考教材重點內容 信息安全工程師 第23章 云計算安全需求分析與安全保護工程

23.1.云計算基本概念 云計算就是在這樣的需求驅動下而產生的一種計算模式。云計算通過虛擬化及網絡通信技術&#xff0c;提供一種按需服務、彈性化的 IT 資源池服務平臺。云計算的主要特征如下。 1. IT 資源以服務的形式提供 IT 資源以一種服務產品的形式提供&#xff0c;滿…

藍橋杯 19. 最大比例

最大比例 原題目鏈接 題目描述 X 星球的某個大獎賽設了 M 級獎勵。每個級別的獎金是一個正整數。 并且&#xff0c;相鄰兩個級別間的比例是一個固定值&#xff0c;也就是說&#xff1a;所有級別的獎金構成一個等比數列。 例如&#xff1a; 獎金數列為 16, 24, 36, 54&…

基于 Python 的自然語言處理系列(82):Transformer Reinforcement Learning

&#x1f517; 本文所用工具&#xff1a;trl、transformers、peft、bitsandbytes &#x1f4d8; 官方文檔參考&#xff1a;https://huggingface.co/docs/trl 一、引言&#xff1a;從有監督微調到 RLHF 全流程 隨著語言大模型的發展&#xff0c;如何在大規模預訓練模型基礎上更精…