数字键盘输入法——崩出来的“猪”字的背后

LVGL数字键盘在嵌入式系统中的工程实现与状态管理 数字键盘是嵌入式人机交互中典型的状态驱动输入组件,其核心原理在于将物理按键事件映射为结构化用户意图,并通过有限状态机保障输入可靠性。技术价值体现在资源受限环境下的确定性响应、防抖容错与安全闭环处理能力,广泛应用于门禁认证、工业HMI和医疗设备等对可靠性要求严苛的场景。结合LVGL框架,数字键盘以文本区域(lv_textarea_t)与矩阵键盘(lv_keyboard_t)协同构成事件驱动型复合控件,依托事件回调机制实现输入-显示-业务逻辑的解耦。本文深入解析其在ESP32平台上的状态管理逻辑、内存安全实践与 阅读详情

    是否还记得去年流行的一个“神秘”的小把戏?就是在MSN、QQ之类的IM工具的消息输入框里,按下键盘上的ALT键,然后在键盘的数字区域打入29482,然后再松开ALT键,然后一个“猪”字就崩了出来?当时有好几个人发了mail告诉我这个小把戏,我马上有了兴趣,于是查了点资料想解开背后的原因。然后用JAVA写了个小程序,输入一个字符串,然后输出这种神秘输入法的“编码”。今天重新翻了出来,改写成了C#版。

 

    事实上,很容易知道,29482就是“猪”字的UNICODE编码的十进制值,十六进制值是/u732A,马上就没有了悬念,对于像JAVA和.NET平台,十分容易就可以获取到字符的UNICODE编码值,因为其本身就是用宽字符存储char型数据的,而且有直接的API可以调用。甚至最简单的,用(int)char强制转换,就可以得到字符的UNICODE编码十进制值。不过这里讲的程序还是不那么做,先获取字符的两个字节,然后再自己转换。

 

    当然,如果光是UNICODE编码,就太没有意思了,于是还顺便做了扩展ASCII编码的获取方法,当然是针对汉字gb2312编码的,这也是简体中文系统的默认编码。这种“输入法”其实跟IM工具毫无关系,似乎就是操作系统开放的一个功能,只是大家没察觉而已,之所以网上流行的说法都是MSN、QQ里输入,是因为这两个工具的字符存储是UNICODE的,所以,事实上所有UNICODE存储的软件都可以用这种输入法,比如MS Office Word,比如以UNICODE存储方式运行的记事本程序(Windows记事本默认是以ASCII编码存储的,但可以用另存为,选择一种字符编码)。那么,对于ASCII编码呢?其实找到了ASCII编码,一样可以使用这种方式输入,双字节语言比如汉语、日语、韩语都可以用扩展ASCII编码存储,都容易获取其编码。

 

    好了,不多说了,直接贴代码了,程序很短,也没什么难点,简单说明一下WordDecode类,用一个UNICODE字符构造该类的实例,然后用属性直接获取到相应的编码。

 

1. WordEncode

 

    /// <summary>
    
/// 字符编码获取
    
/// </summary>

    class WordDecode
    
{       
        
private byte highByteUni;
        
private byte lowByteUni;
        
private byte highByteEAscii;
        
private byte lowByteEAscii;

        
private static Encoding eeas = System.Text.ASCIIEncoding.GetEncoding("gb2312");
        
private static Encoding euni = System.Text.UnicodeEncoding.Unicode;

        
public byte HighByteUni
        
{
            
get { return highByteUni; }
            
set { highByteUni = value; }
        }


        
public byte LowByteUni
        
{
            
get { return lowByteUni; }
            
set { lowByteUni = value; }
        }


        
/// <summary>
        
/// Unicode编码十六进制形式
        
/// </summary>

        public string UnicodeAsHex
        
{
            
get
            
{               
                
if( highByteUni != 0)
                    
return String.Format("/u{0:X}{1:X}", highByteUni, lowByteUni);
                
return String.Format("/u{0:X}", lowByteUni);
            }

        }


        
public byte HighByteEAscii
        
{
            
get { return highByteEAscii; }
            
set { highByteEAscii = value; }
        }


        
public byte LowByteEAscii
        
{
            
get { return lowByteEAscii; }
            
set { lowByteEAscii = value; }
        }


        
/// <summary>
        
/// EAscii编码十六进制形式(gb2312)
        
/// </summary>

        public string EAsciiAsHex
        
{
            
get
            
{
                
if( highByteEAscii !=0)
                    
return String.Format("/0x{0:X}{1:X}", lowByteEAscii, highByteEAscii);
                
return String.Format("/0x{0:X}", lowByteEAscii);
            }

        }


        
/// <summary>
        
/// 数字键盘Unicode编码的十进制值
        
/// </summary>

        public string KeyboardNumAreaUnicodeValue
        
{
            
//20013 -> 78(High)  45(Low)     
            
//         1001110   00101101            
            
//就是"中"字
            get
            
{
                
int u = 0;
                u 
|= this.highByteUni;
                u 
<<= 8;
                u 
|= this.lowByteUni;
                
return u.ToString();
            }

        }


        
/// <summary>
        
/// 数字键盘EAscii编码的十进制值(gb2312)
        
/// </summary>

        public string KeyboardNumAreaEAsciiValue
        
{
            
//54992 -> 208(High)  214(low)       
            
//         11010000   11010110              
            
//就是"中"字
            get
            
{
                
int u = 0;
                u 
|= this.lowByteEAscii;
                u 
<<= 8;
                u 
|= this.highByteEAscii;
                
return u.ToString();
            }

        }


        
/// <summary>
        
/// 原字符(Unicode编码)
        
/// </summary>

        public Char CharacterUni
        
{
            
get
            
{
                
return euni.GetChars(new byte[] { this.lowByteUni, this.highByteUni })[0];
            }

        }


        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="uniChar">一个16位宽字符</param>

        public WordDecode(char uniChar)
        
{
            
byte[] bsUni = euni.GetBytes(new char[] { uniChar });
            
this.highByteUni = bsUni[1];
            
this.lowByteUni = bsUni[0];
            
byte[] bsEAs = eeas.GetBytes(new char[] { uniChar });
            
if (bsEAs.Length == 2)
            
{
                
this.highByteEAscii = bsEAs[1];
                
this.lowByteEAscii = bsEAs[0];
            }

            
else
                
this.lowByteEAscii = bsEAs[0];
        }


        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="highByteUni">Unicode高位字节</param>
        
/// <param name="lowByteUni">Unicode低位字节</param>

        public WordDecode(byte highByteUni, byte lowByteUni)
        
{
            
this.highByteUni = highByteUni;
            
this.lowByteUni = lowByteUni;
        }

    }

 

2. Console中的测试程序

 

 class Program
    {
        
static void Main(string[] args)
        {
            WordDecode[] wes 
= GetEncodeString("猪——数字键盘输入法123ABCabc.");
            
foreach (WordDecode we in wes)
            {
                Console.WriteLine(
"{0} -> {1}, {2}   KUnicode: {3}, KEAscii: {4}", 
                    we.CharacterUni ,we.UnicodeAsHex, we.EAsciiAsHex , 
                    we.KeyboardNumAreaUnicodeValue, we.KeyboardNumAreaEAsciiValue);
            }

            Console.ReadLine();
        }

        
/// <summary>
        
/// 获取字符串的所有字符的数字键盘输入法编码
        
/// </summary>
        
/// <param name="input">输入字符串</param>
        
/// <returns></returns>
        static WordDecode[] GetEncodeString(string input)
        {
            System.Collections.ArrayList arr 
= new System.Collections.ArrayList();
            
char[] chars = input.ToCharArray();
            
foreach (char c in chars)
            {
                arr.Add(
new WordDecode(c));
            }             
            
return (WordDecode[])arr.ToArray(typeof(WordDecode));
        }
    }

 

 3.  测试程序的输出:

 

猪 -> /u732A, /0xD6ED   KUnicode: 29482, KEAscii: 55021
— -> /u2014, /0xA1AA   KUnicode: 8212, KEAscii: 41386
— -> /u2014, /0xA1AA   KUnicode: 8212, KEAscii: 41386
数 -> /u6570, /0xCAFD   KUnicode: 25968, KEAscii: 51965
字 -> /u5B57, /0xD7D6   KUnicode: 23383, KEAscii: 55254
键 -> /u952E, /0xBCFC   KUnicode: 38190, KEAscii: 48380
盘 -> /u76D8, /0xC5CC   KUnicode: 30424, KEAscii: 50636
输 -> /u8F93, /0xCAE4   KUnicode: 36755, KEAscii: 51940
入 -> /u5165, /0xC8EB   KUnicode: 20837, KEAscii: 51435
法 -> /u6CD5, /0xB7A8   KUnicode: 27861, KEAscii: 47016
1 -> /u31, /0x31   KUnicode: 49, KEAscii: 12544
2 -> /u32, /0x32   KUnicode: 50, KEAscii: 12800
3 -> /u33, /0x33   KUnicode: 51, KEAscii: 13056
A -> /u41, /0x41   KUnicode: 65, KEAscii: 16640
B -> /u42, /0x42   KUnicode: 66, KEAscii: 16896
C -> /u43, /0x43   KUnicode: 67, KEAscii: 17152
a -> /u61, /0x61   KUnicode: 97, KEAscii: 24832
b -> /u62, /0x62   KUnicode: 98, KEAscii: 25088
c -> /u63, /0x63   KUnicode: 99, KEAscii: 25344
. -> /u2E, /0x2E   KUnicode: 46, KEAscii: 11776

 

 

    好了,用这个程序,就可以用这种神秘输入法输入任何汉字字符了,在UNICODE环境里,按住ALT键,在键盘数字区域键入相应的KUnicode值,就会打出你要的字符了,在ASCII环境,用同样的方法键入相应的KEAscii值也会输出同样的字符(最简单的,可以在IE的地址栏栏里试试,它是ASCII的,当然默认的记事本存储文件也是)。不过如果你想用笔记本试试这种输入法,那就不行了,因为笔记本键盘一般都没有数字键盘区域。

 
ADB命令深度解析:Android输入法程序化控制与自动化实战 在Android开发与自动化测试领域,程序化控制设备是提升效率的关键。Android Debug Bridge(ADB)作为官方命令行工具,提供了与设备深度交互的能力,其核心原理在于通过客户端-服务器架构,在设备Shell中执行命令并与系统服务通信。其中,对输入法框架(Input Method Framework)的控制具有重要技术价值,它能实现输入法的查询、切换、启用/禁用以及文本注入,从而确保测试环境的纯净与自动化流程的稳定。这一能力在UI自动化测试、批量数据填充、设备故障应急处理等场景中尤为实用。例如 阅读详情

相关推荐

Unity WebGL中文输入难题:从原理到实战的完整解决方案

在Web开发中,跨平台应用常面临输入法(IME)兼容性挑战,尤其是在处理中文、日文等复杂输入时。其核心原理在于浏览器作为沙盒环境,通过HTML输入元素桥接操作系统输入法与Web应用。对于基于WebAssembly的Unity WebGL项目,这一挑战尤为突出,因为其UI并非原生HTML元素,导致输入法候选框位置错位、输入事件无法正确传递等问题。这直接影响了Web游戏的用户体验和交互完整性。通过理解浏览器、Unity运行时与输入法间的三角关系,开发者可以运用WebGL Input System等技术方案,优化

weixin_30887919的博客 388

机内码和UNICODE特殊字符字库表

<br />    最近需要使用字库编写程序,想在网上搜索特殊字符的机内码和UNICODE对应表,但是找了很久也没有找到,失望啊,狠下心来自己通过程序生成了一个对应表,我想这个还是对大家有帮助的,发表出来供参考,呵呵!<br /><br /> <br />/*<br />{区位码,国标码,内码,Unicode码}<br />*/{102,0x2122,0xA1A2,0x3001},/*、*/<br /><br />{103,0x2123,0xA1A3,0x3002},/*。*/<br />{104,0x21

新华编程特战队 4299

Android软键盘高度控制的设计哲学:隐藏API背后的系统思考

Android软键盘高度控制的系统设计思考 Android系统刻意隐藏软键盘高度API,这一设计背后体现了多方面的系统考量: 安全与隐私保护:防止恶意应用通过键盘高度推测输入内容 兼容性保障:适配不同设备(手机/平板/折叠屏)和输入法的高度差异 系统稳定性:避免应用直接控制导致的布局冲突和状态混乱 进程隔离原则:输入法作为独立服务,与应用保持解耦设计 官方推荐通过布局监听或WindowInsets机制间接获取键盘状态,这种间接访问方式既满足了开发需求,又维护了系统安全边界。

保持专注,保持热爱 296

中文与 \u5927\u732a\u8e44\u5b50 这一类编码互转

了解更多关注微信公众号“木下学Python”吧~ a = '大猪蹄子' a = a.encode('unicode_escape') print(a) 运行结果:b'\\u5927\\u732a\\u8e44\\u5b50' 要想在微信发给别人,其中有两个斜杠,删掉一个,然后每一个字空一个,提高微信翻译的正确率 a = '\\u5927\\u732a\\u8e44\\u5b50' ...

木下瞳的博客 7万+

Android开发实战:EditText与TextView输入实时变色技术详解

先回到最原始的问题:我们每天都在用的EditText到底是个啥?它其实不是凭空出现的,而是继承自TextView的“富二代”。你可以把它理解为一个自带键盘接口的TextView,不仅能显示文字,还能让用户敲字进去。<EditTextandroid:hint="请输入内容"这个小小的控件背后藏着不少门道。比如inputType属性,你以为只是控制软键盘弹出类型?错!它是整个输入系统的入口阀门。当你设置成时,系统会自动启用数字键盘并隐藏字符;设为email时,键盘上还会多出个。

weixin_35756690的博客 1002

小白T9小键盘九宫格拼音输入法 64位版

小白输入法是全球第一款,只需要通过小键盘的八个按键就能录入汉字的PC端九宫格拼音输入法。模仿手机的录入方式。

把数字转换成对应的 ASCII 码的 ord() 内置函数

把数字转换成对应的 ASCII 码, print(ord('a')) &gt;&gt;&gt;97      

木下瞳的博客 3701

交叉熵损失函数基本概念及公式

对于二分类问题,模型的输出通常是一个标量,表示样本属于正类的概率。因此,在二分类的交叉熵损失函数中,我们只需要考虑一个概率值,即模型预测为正类的概率。具体来说,当真实标签为1时,我们关注模型预测为正类的概率;当真实标签为0时,我们关注模型预测为负类的概率。因此,二分类的交叉熵损失函数可以表示为:其中,y 表示真实标签,取值为 0 或 1;p 表示模型预测为正类的概率。而对于多分类问题,模型的输出通常是一个向量,表示样本属于各个类别的概率。因此,在多分类的交叉熵损失函数中,我们需要考虑所有类别的概率。

qlkaicx的博客 1万+

ASCII码对照表(包括十六进制、十进制和字符)

一只没有脚的猪的博客 4万+

APM无人船测绘实战:从RTK、测深仪到图传的完整系统集成指南

本文提供了一套完整的APM无人船测绘系统集成实战指南。从RTK模块配置、测深仪数据同步到图传系统接入,详细解析了硬件选型、接线、软件参数调试及QGC地面站任务规划的全流程,旨在帮助用户将分散的部件整合为可自主执行水下地形测绘的可靠工具。

rr23456的博客 520

《惠普工作站设置BIOS从U盘装系统》

惠普工作站设置BIOS 惠普工作站在做服务器时应用广泛,本文介绍下其BIOS开机自启动设置,附上图片,以供学习参考。 惠普工作站设置BIOS 启动步骤如下: 第一步:根据需要对BIOS进行更改,并保存 1.重启工作站按F10进入BIOS设置(也可以按ESC键选择进入BIOS设置的选项)。 图1 惠普工作站B...

istrangeboy&begin zero的博客 2万+

手机和键盘的数字键盘排序为什么是不同的?

还有一种说法是,认为电脑数字键盘的设计,受到了本福德定律 的影响,此定律表示常见数字 1 为首位的出现的概率有 30 %,所以将 1 排列在底部方便输入。我们的手机输入法中的数字键盘,电脑上通用的数字键盘,计算器上的数字键盘等排序是不同的,从观察者角度看,0-9的数字排列有从上到下的排列,还有从下到上的排列。电脑数字键盘一般源自机械式加法机、收银机等计算工具,而加法机流行的键盘排列是小数在下,大数在上,最早与机械结构累加棘轮结构的设计方便有关。键盘排列的差异,一种原因可能来自历史成因。

bugsycrack的博客 1448

数字IC设计随笔之二(VCS、DVE|Verdi单步调试)

VCS+Verdi单步调试

ic疾风传 1万+

Android 6.0以后系统输入法IME不支持中文输入的解决办法

本人从2011年进入android 车载定制系统行业,从事Android车载系统定制相关软件开发,从Android 2.3一直到如今的10.0版本。 输入法用Android自带的输入法,可以输入中英文及数字符号,但是从6.0以后Android原生输入法取消了中文输入法功能,这个决定真的是让广大Android定制系统开发者背后发凉,感受到了来自美帝的满满恶意…… 9.0的系统原生键盘只能输入英文字符/数字/符号/表情,如下图: 让人非常头大,当然你也可以用第三方的输入法,好多车企就会用第三方的.

阿德的博客 3845

USB摄像头开发避坑指南:UVC协议中的Alternate Setting详解

本文深入解析UVC协议中的Alternate Setting机制,这是USB摄像头开发中影响视频流稳定性的关键。文章通过实际案例,详解了Alternate Setting如何管理USB带宽分配,并分析了帧率不达标、图像花屏等典型问题的根源与排查方法,为开发者提供实用的避坑指南和调试技巧。

meat5的博客 240

【接口自动化测试】cookie绕过验证码自动登录?(保持登录状态)

在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者,每次请求接口前如果都需要先去登录一次,这样不仅效率低,还耗费资源。 有些网站是使用cookie辨别用户身份的,此时我们便可以先登录一次,拿到登录成功后的cookie,后续请求时在请求头中加入该cookie,便可保持登录状态直接请求。

weixin_67553250的博客 2071

windowfullscreen后键盘布局顶上去_手机输入法的派别之争,九宫格和全键盘究竟哪种更科学?...

有人的地方,就有江湖。而在手机输入法的江湖里,也分为两个派别。一个是九宫格输入法,另一个则是全键盘输入法。该问题的敏感程度,完全不亚于“咸甜豆腐脑”之争。用惯了九宫格的,无法理解用全键盘的怎么能准确按出想要的字母。而全键盘党则认为,用九宫格都是跟不上时代的老年人。确实,输入法的使用习惯,充满了年代的印记。选择哪种输入法,也与用户年龄密不可分。90后的朋友,应该都还记得将诺基亚手机藏在书桌底下盲打发...

weixin_39694174的博客 128

使用C#实现的多人语音视频系统:WebSocket与WebRTC集成

通过上述的代码示例,我们可以使用C#编写一个多人语音视频系统,该系统集成了WebSocket和WebRTC技术。当然,这只是一个简单的示例,实际的多人语音视频系统可能需要更多的功能和优化。通过结合这两种技术,我们可以实现实时的语音和视频通信,支持多人同时参与。在上述代码中,我们创建了一个WebSocket服务器,监听在本地的8080端口,并创建了一个WebRTC连接。接下来,我们将详细介绍如何使用C#编写一个多人语音视频系统,包括使用WebSocket建立连接和使用WebRTC进行实时通信。

TjsReact的博客 1634

C++虚拟数字键盘开发指南:从MVC架构到SDL2实现

在软件工程中,图形用户界面(GUI)组件的设计常采用模型-视图-控制器(MVC)架构模式,以实现逻辑、数据和表现的分离,提升代码的可维护性和可扩展性。其核心原理是将业务逻辑(模型)、用户界面(视图)和用户输入处理(控制器)解耦,通过观察者模式等机制进行通信。这种设计模式的技术价值在于,它允许开发者独立修改某一层而不影响其他部分,极大地便利了跨平台适配、UI换肤和功能迭代。在需要定制化输入界面的应用场景中,例如工业控制触摸屏、信息亭或嵌入式设备,一个轻量级、可嵌入的虚拟键盘组件是常见需求。本文以C++和轻量级

afeyfre41671的博客 432

无需Python环境!纯C#上位机+OpenCVSharp4+ONNX Runtime实现YOLOv8摄像头实时流检测,工业级稳定

摘要 工业自动化C#开发中,传统Python方案实现视觉检测功能存在环境依赖、内存泄漏和性能不稳定等问题。本文提出基于.NET 8+OpenCVSharp4+ONNX Runtime的纯C#方案,通过实际案例验证其优势: 零Python依赖,支持离线部署 内存稳定(380MB/72h),检测延迟<80ms 检测精度达漏检率<0.1%,误检率<0.5% 保留原有业务逻辑代码,3天完成适配 方案采用分层架构设计,支持多种硬件平台和操作系统,提供从模型导出到部署的全流程指导,为工业视觉检测提供高

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 196

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LVGL键盘背后的交互哲学:从物理按键到触摸屏的体验设计

本文探讨了LVGL键盘控件在从物理按键到触摸屏的交互设计中的哲学与实践。通过分析输入法界面的认知迁移、模态切换的认知负荷管理以及多模态输入融合设计,揭示了LVGL如何优化用户体验。文章特别关注了键盘控件在医疗设备和工业HMI中的应用,展示了其灵活性和适应性。

embedding5hiker的博客 728

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

22478计算机代码,数字2247代表啥意思 2247数字意思

数字2247代表啥意思 2247数字意思以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!数字2247爱情什么意思在拥有时,总是对那些幸福习以为常,视之Wei理所当然, 以为那永远不会离自己远去, Jiu而久之,自己习惯了享受,习惯了接纳, Que忘记了付出,忘记了奉献,忘记了她也是需Yao你的呵护 ,需要你的爱惜,每一份...

weixin_36303807的博客 5045

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从单例模式到事件过滤:深度解析Qt自定义软键盘的架构设计

本文深度解析了基于Qt框架构建自定义软键盘(虚拟键盘)的架构设计。通过剖析开源Demo,重点阐述了如何运用单例模式管理全局输入法实例,以及通过事件过滤器精准捕获输入焦点,实现稳定高效的嵌入式输入解决方案。文章还探讨了利用QTimer实现长按功能等高级交互,并提出了模块化、可扩展的框架设计思路,为开发定制化人机交互界面提供了实用蓝图。

weixin_29192141的博客 544

告别硬编码!用LVGL 8.x的Keyboard控件,5分钟为你的嵌入式UI加上智能输入法

本文详细介绍了如何利用LVGL 8.x的Keyboard控件为嵌入式UI添加智能输入法,告别硬编码时代。通过动态键盘布局、输入预测算法和事件系统集成,开发者可以在资源受限的环境中实现接近移动端的输入体验,提升用户交互效率。文章还提供了内存优化和跨场景实战案例,帮助开发者快速应用。

weixin_30706691的博客 426

键盘灯暗藏玄机:从ScrollLock到Win键锁,那些被你忽略的键盘指示灯冷知识

本文揭秘键盘指示灯背后的冷知识,从ScrollLock到Win键锁的隐藏功能。探索NumLock、CapsLock和ScrollLock的设计哲学及现代应用,解析Fn键组合与Win键锁屏的联动机制,并分享键盘灯在系统监控等创意用途中的高级玩法。

weixin_30275415的博客 425
上一篇: 自动扫雷程序
ZeroStone
博客等级 码龄20年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值