HarmonyOS ArkTS 实战实现一个进制转换器项目效果本文实现的是一个基于 HarmonyOS 和 ArkTS 的进制转换器。项目中使用 ArkUI 组件完成页面布局通过State管理状态数据实现二进制、八进制、十进制、十六进制之间的实时互相转换输入任意进制其他进制自动更新支持复制功能。最终运行效果如下页面主要包含以下内容顶部应用标题四个输入区域二进制、八进制、十进制、十六进制当前输入的进制高亮显示每个进制对应一个复制按钮输入键盘提示十六进制显示A-F页面整体采用 ArkUI 声明式布局。本文重点是演示如何在 HarmonyOS 项目中使用 ArkTS 和 ArkUI 实现一个程序员工具类单页面应用。项目代码主要写在entry/src/main/ets/pages/Index.ets文件中适合作为 HarmonyOS ArkTS 入门到进阶之间的练习案例。前言在编程和计算机学习中我们经常需要在不同进制之间转换数字。二进制、八进制、十进制、十六进制是最常用的四种进制手动转换很麻烦一个好用的进制转换器可以大大提高效率。从应用开发角度来看这个项目不依赖后端接口也不需要数据库但能练习 ArkTS 中的状态管理、多输入框联动、输入验证、数字进制转换和剪贴板操作等内容。本文基于 HarmonyOS 和 ArkTS 实现一个进制转换器。用户在任意进制输入框输入数字其他三个进制会自动实时转换显示每个结果都可以一键复制。这个项目的核心不是简单的进制转换API而是多输入框的联动和输入验证。在一个输入框输入时其他输入框自动更新这正是 ArkUI 声明式开发的基本思想。一、项目目标本次实践主要实现以下目标创建 HarmonyOS ArkTS 页面使用Entry和Component定义页面组件使用State管理页面状态支持二进制BIN输入和转换支持八进制OCT输入和转换支持十进制DEC输入和转换支持十六进制HEX输入和转换输入时实时转换其他进制输入验证只允许合法字符每个结果一键复制当前编辑的输入框高亮大数字支持使用Builder封装进制输入项完成一个可以运行的进制转换器页面。这个项目虽然是单页面应用但它实现了四种进制的实时互相转换是程序员常用的工具比普通静态页面更适合练习 ArkTS。二、技术栈类型内容开发方向HarmonyOS 应用开发开发语言ArkTSUI 框架ArkUISDK 版本HarmonyOS API 23 及以上工程模型Stage 模型核心组件Text / TextInput / Button / Column / Row状态管理State数据处理进制转换 / 输入验证 / 实时联动项目入口entry/src/main/ets/pages/Index.ets运行平台模拟器或真机本项目是 HarmonyOS 原生 ArkTS 项目。页面主体由 ArkUI 组件构建核心逻辑写在Index.ets文件中不依赖后端接口也不需要额外配置数据库。三、为什么选择进制转换器项目进制转换器适合作为 ArkTS 练习项目主要有以下几个原因。第一实用性强。程序员和计算机相关专业学生经常需要进制转换。第二业务场景真实。调试、看内存地址、网络编程等场景都需要进制转换。第三适合练习状态管理。四个输入框联动一个变化其他都要更新。第四适合练习输入验证。不同进制允许的字符不同需要过滤非法输入。第五适合练习数字处理。JavaScript/TypeScript的parseInt和toString支持进制转换。第六扩展空间比较大。基础功能完成后可以继续增加ASCII转换、字节序转换、IP地址转换、Unicode转换和浮点数转换。在本项目中当前输入的十进制数值是核心数据。所有进制的显示都基于这个数值转换而来。四、功能规则说明支持的进制进制基数允许字符二进制(BIN)20, 1八进制(OCT)80-7十进制(DEC)100-9十六进制(HEX)160-9, A-F, a-f转换规则在任意输入框输入合法字符其他输入框自动更新输入非法字符自动过滤空输入时所有输入框显示空或0支持大数字在JavaScript安全整数范围内十六进制自动转大写显示复制功能点击复制按钮复制对应进制的字符串到剪贴板。五、项目结构本项目主要修改首页文件entry └── src └── main └── ets └── pages └── Index.ets其中文件作用Index.ets编写页面结构、状态数据和进制转换逻辑本文不涉及复杂路由也不需要额外创建多个页面。对于练习项目来说把主要逻辑集中在一个Index.ets文件中更方便理解。六、核心实现思路本项目的核心流程如下使用State保存当前十进制数值和四个进制的显示字符串用户在某个输入框输入过滤非法字符只保留该进制允许的字符将输入的字符串解析为十进制数值将十进制数值转换为其他三个进制的字符串更新所有输入框的显示高亮当前正在编辑的输入框点击复制按钮复制对应内容处理空输入和非法输入。项目中最重要的状态变量如下State binValue: string State octValue: string State decValue: string State hexValue: string State activeRadix: number 10其中状态变量作用binValue二进制字符串octValue八进制字符串decValue十进制字符串hexValue十六进制字符串activeRadix当前激活的进制内部以十进制数值为中间值所有转换都经过十进制中转这样逻辑最简单。七、Index.ets 完整代码打开文件entry/src/main/ets/pages/Index.ets将其中内容替换为下面代码EntryComponentstruct Index{StatebinValue:string0StateoctValue:string0StatedecValue:string0StatehexValue:string0StateactiveRadix:number10privateupdateFromRadix(value:string,radix:number):void{letfilteredthis.filterInput(value,radix)if(filtered){this.binValuethis.octValuethis.decValuethis.hexValuereturn}letnumparseInt(filtered,radix)if(isNaN(num)){num0}this.binValuenum.toString(2)this.octValuenum.toString(8)this.decValuenum.toString(10)this.hexValuenum.toString(16).toUpperCase()}privatefilterInput(value:string,radix:number):string{letpattern:RegExpswitch(radix){case2:pattern/[^01]/gbreakcase8:pattern/[^0-7]/gbreakcase10:pattern/[^0-9]/gbreakcase16:pattern/[^0-9a-fA-F]/gbreakdefault:returnvalue}returnvalue.replace(pattern,)}privatecopyValue(value:string):void{if(!value)returnletcontextgetContext(this)try{context.clipboard.setContent(value)}catch(e){console.error(复制失败)}}BuilderRadixInput(label:string,sublabel:string,value:string,radix:number,color:string){Column(){Row(){Column(){Text(label).fontSize(18).fontWeight(FontWeight.Bold).fontColor(color)Text(sublabel).fontSize(12).fontColor(#9CA3AF)}.alignItems(HorizontalAlign.Start)Blank()Button(复制).height(32).fontSize(13).padding({left:12,right:12}).fontColor(color).backgroundColor(color15).borderRadius(16).onClick((){this.copyValue(value)})}.width(100%).margin({bottom:12})TextInput({text:value,placeholder:0}).width(100%).height(56).fontSize(20).fontFamily(monospace).fontColor(#182431).backgroundColor(this.activeRadixradix?color08:#F9FAFB).borderRadius(12).border({width:this.activeRadixradix?2:1,color:this.activeRadixradix?color:#E5E7EB}).padding({left:16,right:16}).type(InputType.Number).onFocus((){this.activeRadixradix}).onChange((newValue:string){this.activeRadixradixthis.updateFromRadix(newValue,radix)})}.width(100%).padding(16).backgroundColor(Color.White).borderRadius(16).margin({bottom:12}).shadow({radius:6,color:#06000000,offsetX:0,offsetY:2})}build(){Scroll(){Column(){Text(进制转换器).fontSize(28).fontWeight(FontWeight.Bold).fontColor(#182431).margin({top:22})Text(基于 HarmonyOS ArkTS 的程序员工具).fontSize(14).fontColor(#6B7280).margin({top:8,bottom:20})this.RadixInput(二进制,BIN (Base 2),this.binValue,2,#3B82F6)this.RadixInput(八进制,OCT (Base 8),this.octValue,8,#8B5CF6)this.RadixInput(十进制,DEC (Base 10),this.decValue,10,#10B981)this.RadixInput(十六进制,HEX (Base 16),this.hexValue,16,#F59E0B)Column(){Text( 提示).fontSize(14).fontWeight(FontWeight.Medium).fontColor(#6B7280).width(100%).margin({bottom:8})Text(在任意输入框输入数字其他进制会自动转换。二进制只允许0和1八进制0-7十进制0-9十六进制0-9和A-F。).fontSize(13).fontColor(#9CA3AF).lineHeight(20)}.width(100%).padding(16).backgroundColor(#F9FAFB).borderRadius(12).margin({top:8})}.width(100%).padding({left:18,right:18,bottom:30})}.width(100%).height(100%).backgroundColor(#F5F7FA).scrollBar(BarState.Off)}}八、代码实现说明1. 输入过滤每个进制只允许特定字符用正则表达式过滤非法输入二进制只保留0和1八进制只保留0-7十进制只保留0-9十六进制只保留0-9和a-f/A-F2. 进制转换使用JavaScript内置的parseInt和toString方法parseInt(str, radix)将指定进制的字符串转为十进制数字num.toString(radix)将十进制数字转为指定进制的字符串以十进制为中间值实现任意进制之间的转换。3. 实时联动输入变化时立即更新所有进制不需要点击转换按钮体验流畅。4. 焦点高亮当前输入框获得焦点时边框和背景变为对应进制的主题色直观显示当前在编辑哪个。5. 一键复制每个进制都有独立的复制按钮点击复制对应的值到剪贴板。6. 等宽字体数字使用等宽字体显示对齐整齐阅读更舒服。九、运行项目代码编写完成后在DevEco Studio中运行项目。在不同输入框输入数字检查其他进制是否正确转换测试非法字符是否被过滤测试复制功能是否正常。十、开发中遇到的问题输入过滤必须过滤掉非法字符否则parseInt会出错空输入处理输入为空时所有框都清空不显示0焦点状态输入和聚焦都要更新activeRadix十六进制大写统一转大写显示更规范十一、总结本文基于HarmonyOS和ArkTS实现了一个进制转换器。项目通过parseInt和toString实现四种进制的实时互相转换支持输入验证、焦点高亮和一键复制。这个项目展示了ArkTS中多输入框联动、输入验证和数字处理的基本方法适合作为入门练习项目。
企业数字化 ERP 产品动态
相关推荐
Unity场景流框架设计:基于状态机的场景管理与优化实践 1. 项目概述:为什么Unity需要一个场景流框架?在Unity项目开发中,尤其是中大型游戏或应用,场景管理往往是架构中最混乱、最脆弱的一环。很多开发者,包括我自己在早期,都习惯于在Start或Awake里写一堆SceneMa… · 2026/11/5 5:53:51
D2DX:5分钟让经典《暗黑破坏神2》在现代电脑上完美运行的终极方案 D2DX:5分钟让经典《暗黑破坏神2》在现代电脑上完美运行的终极方案 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx … · 2026/11/8 19:21:37
Windows下安装配置WSL2的完整指南 1. 为什么要在Windows下运行Linux?十年前,想要同时使用Windows和Linux系统,我们得老老实实装双系统,每次切换都得重启。后来有了虚拟机,但性能损耗让人头疼。直到WSL2的出现,这个痛点才真正被解决。WSL2&am… · 2026/10/26 2:23:55
找工作必须的美凯龙电工证怎么考?官方报名入口全攻略 找工作必须的美凯龙电工证怎么考?官方报名入口全攻略 你缺的不是能力,而是美凯龙电工证,没有它,连面试机会都没有。别再等了,现在就告诉你怎么在官方报名入口上报名,顺利拿到证书,稳稳拿下电工岗位。 美凯龙电工证到底是什么?为什么这么重要?… · 2026/11/14 3:42:32
内江办电工证在哪办全流程办理指南,含金量到底有多高? 内江办电工证在哪办全流程办理指南,含金量到底有多高? 急需特种作业证才能上岗找工作?你不是一个人。现在越来越多的岗位要求持证上岗,特别是像电工证这种门槛高的证书,几乎是行业的“通行证”。但很多人对“内江办电工证在哪办”一脸迷茫,不知道从哪开… · 2026/11/14 3:42:32
铜仁应急管理局电工证真实经历:工地太忙根本没时间复习考试怎么办? 铜仁应急管理局电工证真实经历:工地太忙根本没时间复习考试怎么办? 工地太忙根本没时间复习考试,我之前也和你一样,每天从早忙到晚,手头还有十几个项目要盯,连吃饭的时间都成了奢望。那天,我在工地上接到电话,说我的电工证快到期了,需要去铜仁应急管… · 2026/11/14 3:42:32
南京电工证怎么补办?全国通用证书怎么考怎么用 南京电工证怎么补办?全国通用证书怎么考怎么用 你还在为找不到电工证发愁吗?急需特种作业证才能上岗找工作,别再卡在这道门槛上了!尤其是像郑州金水区从事公路工程的朋友,电工证不仅关乎安全,更直接影响薪资与晋升。本文将帮你搞清楚【南京电工证怎么补… · 2026/11/14 3:42:32
考电工证在哪个app找?电子证书时代怎么考更靠谱 考电工证在哪个app找?电子证书时代怎么考更靠谱 你是不是正被“急需特种作业证才能上岗找工作”这个问题折磨?特别是像新乡市政公用工程这些岗位,电工证几乎是入职的硬门槛。别急,现在考电工证,不一定要去线下,手机上也能搞定,关键是得找到靠谱的a… · 2026/11/14 3:42:32
赤峰电工证办理流程全攻略+郑州报考避坑指南 赤峰电工证办理流程全攻略+郑州报考避坑指南 怕考不过白交培训费?别急,这篇讲透赤峰电工证办理流程、郑州报考避坑指南、薪资前景全解析,看完再决定要不要报!… · 2026/11/14 3:41:32
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/13 22:30:50
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43
有初级电工证怎么工作 2026河南最新政策怎么应对 有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31
为什么要低压电工证实操考试考什么 为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 22:31:30