Electron使用WebAssembly實現CRC-8 ITU校驗

Electron使用WebAssembly實現CRC-8 ITU校驗

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

CRC-8 ITU校驗函數WebAssembly源文件

C語言實現CRC-8 ITU格式校驗的介紹見:《C語言CRC-8 ITU格式校驗函數》

選擇上面介紹文章中的uint8_t PY_CRC_8_T_ITU(uint8_t *di, uint32_t len)校驗函數,建立一個新文件PY_CRC_8_T_ITU.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>EM_PORT_API(void *) mymalloc(uint32_t size) {return malloc(size);
}EM_PORT_API(void) myfree(void * ptr) {free(ptr);
}EM_PORT_API(uint8_t) PY_CRC_8_T_ITU(uint8_t *di, uint32_t len)
{uint8_t crc_poly = 0x07; //X^8+X^2+X^1+1 total 8 effective bits without X^8.uint8_t data_t = 0;while(len--){data_t ^=  *di++;for (int8_t i=8; i>0; --i){if (data_t & 0x80)data_t = (data_t<<1) ^ crc_poly;elsedata_t = (data_t<<1);}}return (data_t ^ 0x55);
}

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

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

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

Electron調用WebAssembly CRC-8 ITU函數演示源文件

下載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_8_T_ITU.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_8_T_ITU.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_8_T_ITU(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_8_T_ITU(ptr, count)則進行CRC-8 ITU校驗函數的調用,提供了內存指針和要校驗的字節數量。

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

Electron調用WebAssembly CRC-8 ITU函數演示效果

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

107是打印出的CRC校驗結果,十六進制值為0x6B, 通過在線工具比較驗證:
在這里插入圖片描述

Electron使用WebAssembly實現CRC-8 ITU校驗演示工程下載

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

–End–

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

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

相關文章

python如何遍歷postgresql所有的用戶表

要遍歷PostgreSQL數據庫中的所有用戶表&#xff0c;可以按照以下步驟操作&#xff1a; 安裝必要依賴庫 pip install psycopg2-binary使用標準SQL查詢方案&#xff08;推薦&#xff09; import psycopg2def list_user_tables():try:conn psycopg2.connect(host"your_ho…

面試相關的知識點

1 vllm 1.1常用概念 1 vllm&#xff1a;是一種大模型推理的框架&#xff0c;使用了張量并行原理&#xff0c;把大型矩陣分割成低秩矩陣&#xff0c;分散到不同的GPU上運行。 2 模型推理與訓練&#xff1a;模型訓練是指利用pytorch進行對大模型進行預訓練。 模型推理是指用訓…

node.js如何實現雙 Token + Cookie 存儲 + 無感刷新機制

node.js如何實現雙 Token Cookie 存儲 無感刷新機制 為什么要實施雙token機制&#xff1f; 優點描述安全性Access Token 短期有效&#xff0c;降低泄露風險&#xff1b;Refresh Token 權限受限&#xff0c;僅用于獲取新 Token用戶體驗用戶無需頻繁重新登錄&#xff0c;Toke…

MySQL——6、內置函數

內置函數 1、日期函數2、字符串函數3、數學函數4、其他函數 1、日期函數 1.1、獲取當前日期&#xff1a; 1.2、獲取當前時間&#xff1a; 1.3、獲取當前時間戳&#xff1a; 1.4、獲取當前日期時間&#xff1a; 1.5、提取出日期&#xff1a; 1.6、給日期添加天數或時間…

【Linux】Shell腳本中向文件中寫日志,以及日志文件大小、數量管理

1、寫日志 shell腳本中使用echo命令,將字符串輸入到文件中 覆蓋寫入:echo “Hello, World!” > laoer.log ,如果文件不存在,則會創建文件追加寫入:echo “Hello, World!” >> laoer.log轉移字符:echo -e “Name:\tlaoer\nAge:\t18” > laoer.log,\t制表符 …

深度學習中ONNX格式的模型文件

一、模型部署的核心步驟 模型部署的完整流程通常分為以下階段&#xff0c;用 “跨國旅行” 類比&#xff1a; 步驟類比解釋技術細節1. 訓練模型學會一門語言&#xff08;如中文&#xff09;用 PyTorch/TensorFlow 訓練模型2. 導出為 ONNX翻譯成國際通用語言&#xff08;如英語…

基于兩階段交互控制框架的互聯多能系統協同自治優化

摘要&#xff1a;從多能源集成系統的效益出發&#xff0c;建立了基于交互控制的雙層兩階段框架&#xff0c;以實現互聯多能源系統(MESs)間的最優能量供應。在下層&#xff0c;各MES通過求解成本最小化問題自主確定其可控資產的最優設定值&#xff0c;其中滾動時域優化用于處理負…

matlab編寫的BM3D圖像去噪方法

BM3D&#xff08;Block-Matching and 3D Filtering&#xff09;是一種基于塊匹配和三維濾波的圖像去噪方法&#xff0c;廣泛應用于圖像處理領域。它通過在圖像中尋找相似的塊&#xff0c;并將這些塊堆疊成三維數組進行濾波處理&#xff0c;從而有效地去除噪聲&#xff0c;同時保…

前端(小程序)學習筆記(CLASS 1):組件

1、小程序中組件的分類 小程序中的組件也是由宿主環境提供的&#xff0c;開發者可以基于組件快速搭建出漂亮的頁面結構。官方把小程序的組件分為了9大類&#xff0c;分別是&#xff1a; * 視圖容器&#xff0c;* 基礎內容&#xff0c;* 表單組件&#xff0c;* 導航組件 媒體…

基于亞馬遜云科技構建音視頻直播審核方案

1. 前言 隨著互聯網內容形態的多樣化發展&#xff0c;用戶生成內容&#xff08;UGC&#xff09;呈現爆發式增長。社交平臺、直播、短視頻、語聊房等應用場景中&#xff0c;海量的音視頻內容需要進行實時審核&#xff0c;以維護平臺安全與用戶體驗。 然而&#xff0c;企業在構…

linux基礎操作11------(運行級別)

一.前言 這個是linux最后一章節內容&#xff0c;主要還是介紹一下&#xff0c;這個就和安全有關系了&#xff0c;內容還是很多的&#xff0c;但是呢&#xff0c;大家還是做個了解就好了。 二.權限掩碼 運行級別 0 關機 運行級別 1 單用戶 &#xff0c;這個類似于windows安全…

QT+Visual Studio 配置開發環境教程

一、QT架構 Qt Creator 是一個輕量級、跨平臺的 IDE&#xff0c;專為 Qt 開發量身打造&#xff0c;內置對 qmake/CMake 的深度支持、Kits 配置管理、原生 QML 調試器以及較低的資源占用維基百科。 而在 Windows 環境下&#xff0c;Visual Studio 配合 Qt VS Tools 擴展則可將 Q…

(2)JVM 內存模型更新與 G1 垃圾收集器優化

JVM 內存模型更新與 G1 垃圾收集器優化 &#x1f680; 掌握前沿技術&#xff0c;成為頂尖 Java 工程師 2?? JVM 內存模型更新 &#x1f449; 點擊展開題目 JVM內存模型在Java 17中有哪些重要更新&#xff1f;如何優化G1垃圾收集器在容器化環境的表現&#xff1f; &#x1…

TASK04【Datawhale 組隊學習】構建RAG應用

目錄 將LLM接入LangChain構建檢索問答鏈運行成功圖遇到的問題 langchain可以便捷地調用大模型&#xff0c;并將其結合在以langchain為基礎框架搭建的個人應用中。 將LLM接入LangChain from langchain_openai import ChatOpenAI實例化一個 ChatOpenAI 類,實例化時傳入超參數來…

springAI調用deepseek模型使用硅基流動api的配置信息

查看springai的官方文檔&#xff0c;調用deepseek的格式如下&#xff1a; spring.ai.deepseek.api-key${your-api-key} spring.ai.deepseek.chat.options.modeldeepseek-chat spring.ai.deepseek.chat.options.temperature0.8 但是硅基流動的格式不是這樣&#xff0c;這個傘兵…

SpringMVC 通過ajax 實現文件的上傳

使用form表單在springmvc 項目中上傳文件&#xff0c;文件上傳成功之后往往會跳轉到其他的頁面。但是有的時候&#xff0c;文件上傳成功的同時&#xff0c;并不需要進行頁面的跳轉&#xff0c;可以通過ajax來實現文件的上傳 下面我們來看看如何來實現&#xff1a; 方式1&…

Docker安裝Fluentd采集中間件

Fluentd 簡介 &#xff1a;Fluentd 是一個高性能、可擴展的數據收集與聚合工具&#xff0c;能夠統一數據收集和消費&#xff0c;實現各種數據源到各種數據接收器的高效傳輸&#xff0c;廣泛應用于日志收集等領域。 功能特點 &#xff1a; 統一日志收集 &#xff1a;支持從各種…

07SpringMVC底層形象解析

目錄 一、基于餐廳比喻的代碼示例 &#xff0c;幫助你理解各組件間的協作關系 1. DispatcherServlet 配置&#xff08;服務員&#xff09; 2. HandlerMapping 配置&#xff08;菜單索引&#xff09; 3. Controller 實現&#xff08;廚師&#xff09; 4. Service 層&#x…

eclipse 生成函數說明注釋

在Eclipse中生成函數說明注釋&#xff08;JavaDoc風格&#xff09;可以通過以下方法實現&#xff1a; 快捷鍵方式&#xff1a; 將光標放在函數上方輸入/**后按回車鍵Eclipse會自動生成包含參數和返回值的注釋模板 菜單方式&#xff1a; 選中函數點擊菜單欄 Source > Gen…

【題解-洛谷】P6180 [USACO15DEC] Breed Counting S

題目:P6180 [USACO15DEC] Breed Counting S 題目描述 Farmer John 的 N N N 頭奶牛,從左到右編號為 1 …