当前位置: 首页 > news >正文

【Ubuntu与Linux操作系统:十、C/C++编程】

第10章 C/C++编程


10.1 Linux编程基础

Linux编程基础涵盖了C/C++语言在Linux环境中的特点和使用方法。Linux以其高性能和开源特性成为系统编程的重要平台。

1. C语言与Linux的关系
Linux内核主要是用C语言编写的,因此学习C语言是理解Linux底层机制的必要前提。C语言的高效性和对硬件的直接访问能力,使其成为开发Linux应用程序和系统模块的首选语言。

2. 编程工具链
Linux下常用的工具链包括:

  • GCC:GNU Compiler Collection,是Linux下的主要编译工具。支持多种语言编译,C和C++是其核心语言。
  • GDB:GNU Debugger,用于调试C/C++程序,支持断点、变量监控等功能。
  • Make:用于自动化构建编译过程,简化了复杂项目的编译。

3. 文件操作
Linux编程中,文件操作是核心任务之一。C语言提供了fopenfreadfwritefclose等函数来操作文件。此外,Linux系统还提供了openreadwrite等系统调用,用于更底层的文件控制。

4. 进程与线程
Linux支持多任务处理,通过C语言可以创建和管理进程和线程。常用的相关库包括:

  • fork:用于创建子进程。
  • Pthreads:POSIX线程库,支持多线程编程。

5. 常用库和API
Linux开发中经常使用标准C库(如stdio.hstdlib.h)、网络编程库(如sys/socket.h)以及线程库(如pthread.h)。

Linux编程基础为开发人员提供了强大的工具和接口,帮助实现高效、可靠的应用程序。


10.2 使用make和Makefile实现自动编译

在C/C++项目开发中,随着项目规模的增大,管理代码的编译和链接变得复杂。makeMakefile提供了一种简单高效的自动化编译方式。

1. 什么是make和Makefile

  • make:一种构建工具,用于根据规则自动完成程序编译、链接等任务。
  • Makefile:一种配置文件,定义了文件之间的依赖关系和构建规则。

2. Makefile的基本结构
Makefile主要由目标、依赖和命令组成:

target: dependenciescommand

例如:

main.o: main.cgcc -c main.c -o main.o

3. 自动化的好处

  • 避免重复编译:make只会重新编译被修改的文件。
  • 提高效率:通过简化复杂的编译步骤,提高开发效率。

4. 变量与伪目标
Makefile支持变量定义和伪目标:

CC=gcc
CFLAGS=-Wall
main: main.o$(CC) $(CFLAGS) main.o -o main

clean是一个常用的伪目标,用于清理临时文件:

clean:rm -f *.o main

通过makeMakefile,开发者可以有效管理项目的构建过程,特别是大型多模块程序的开发。


10.3 基于GTK+的图形用户界面编程

GTK+(GIMP Toolkit)是一个跨平台的开源图形用户界面库,广泛用于Linux下的桌面应用开发。

1. GTK+的特点

  • 开源免费:适合个人开发和商业应用。
  • 多语言支持:主要使用C语言,同时支持Python、C++等语言的绑定。
  • 丰富的控件库:提供窗口、小部件、菜单、按钮等大量预定义控件。

2. GTK+开发环境的搭建
首先,安装开发工具和库:

sudo apt-get install libgtk-3-dev

创建一个简单的GTK程序:

#include <gtk/gtk.h>
int main(int argc, char *argv[]) {GtkWidget *window;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);gtk_main();return 0;
}

使用gcc编译:

gcc -o myapp myapp.c `pkg-config --cflags --libs gtk+-3.0`

3. GTK+核心组件

  • 窗口和容器:如GtkWindowGtkBox
  • 输入控件:如按钮、文本框、下拉列表。
  • 信号和事件:通过g_signal_connect连接控件的事件回调函数。

4. 应用场景
GTK+被广泛用于构建桌面环境(如GNOME)和常见应用程序(如GIMP)。其强大的灵活性和丰富的功能使其成为Linux GUI开发的重要工具。


10.4 基于Qt的图形用户界面编程

Qt是一个跨平台的C++图形用户界面框架,以其高性能、强大的功能和易用性著称,被广泛应用于桌面和嵌入式系统开发。

1. Qt的特点

  • 跨平台:支持Linux、Windows、macOS等多种操作系统。
  • 模块化设计:提供了GUI、网络、数据库、多媒体等模块。
  • 支持C++:基于C++编写,同时支持Qt特有的信号与槽机制,便于事件处理。

2. 开发环境搭建
安装Qt工具包:

sudo apt-get install qtcreator qt5-default

创建一个简单的Qt程序:

#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {QApplication app(argc, argv);QPushButton button("Hello, Qt!");button.show();return app.exec();
}

编译运行:

qmake -project
qmake
make
./myapp

3. 核心组件

  • 窗口类:如QWidgetQMainWindow
  • 布局管理:如QHBoxLayoutQVBoxLayout
  • 事件处理:通过信号与槽机制实现控件交互。

4. 开发工具
Qt Creator是官方提供的IDE,支持图形化界面设计、代码编辑、调试等功能。

Qt因其强大的跨平台特性和模块化设计,适用于开发复杂的图形用户界面应用。

相关文章:

【Ubuntu与Linux操作系统:十、C/C++编程】

第10章 C/C编程 10.1 Linux编程基础 Linux编程基础涵盖了C/C语言在Linux环境中的特点和使用方法。Linux以其高性能和开源特性成为系统编程的重要平台。 1. C语言与Linux的关系 Linux内核主要是用C语言编写的&#xff0c;因此学习C语言是理解Linux底层机制的必要前提。C语言的…...

豆包MarsCode:可以在线用的智能AI编程助手

大家好&#xff0c;今天我想和大家分享一个我最近发现的宝藏工具——豆包MarsCode。 作为一个程序员&#xff0c;我一直在寻找能够提高工作效率、快捷、 优化代码质量的在线编程工具。豆包MarsCode IDE&#xff0c;这个由字节跳动推出的智能编程助手&#xff0c;让我眼前一亮&…...

RabbitMQ基础(简单易懂)

RabbitMQ高级篇请看&#xff1a; RabbitMQ高级篇-CSDN博客 目录 什么是RabbitMQ&#xff1f; MQ 的核心概念 1. RabbitMQ 的核心组件 2. Exchange 的类型 3. 数据流向说明 如何安装RabbitQueue&#xff1f; WorkQueue&#xff08;工作队列&#xff09;&#xff1a; Fa…...

UE5 使用内置组件进行网格切割

UE引擎非常强大&#xff0c;直接内置了网格切割功能并封装为蓝图节点&#xff0c;这项功能在UE4中就存在&#xff0c;并且无需使用Chaos等模块。那么就来学习下如何使用内置组件实现网格切割。 1.配置测试用StaticMesh 对于被切割的模型&#xff0c;需要配置一些参数。以UE5…...

【面试题】技术场景 6、Java 生产环境 bug 排查

生产环境 bug 排查思路 分析日志&#xff1a;首先通过分析日志查看是否存在错误信息&#xff0c;利用之前讲过的 elk 及查看日志的命令缩小查找错误范围&#xff0c;方便定位问题。远程 debug 适用环境&#xff1a;一般公司正式生产环境不允许远程 debug&#xff0c;多在测试环…...

macOS 安装tomcat9

macOS 安装tomcat9 URL&#xff1a;https://tomcat.apache.org/download-90.cgi 解压之后放到指定目录 /Users/lanren/install/tomcat-9 自己取个名字就行 给权限&#xff1a; ① 先进行权限修改&#xff1a;终端输入sudo chmod 755 /Users/lanren/install/tomcat-9/bin/…...

多线程之旅:属性及其基本操作

上次分享到了&#xff0c;多线程中是是如何创建的&#xff0c;那么接下来&#xff0c;小编继续分享下多线程的相关知识。 多线程中的一些基本属性。 基本属性 属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDemo()是否存活isAlive()是…...

隧道网络:为数据传输开辟安全通道

什么是隧道网络&#xff1f; 想象一下&#xff0c;你正在一个陌生的城市旅行&#xff0c;并且想要访问家里的电脑。但是&#xff0c;直接连接是不可能的&#xff0c;因为家庭网络通常受到防火墙或路由器的保护&#xff0c;不允许外部直接访问。这时候&#xff0c;隧道网络&…...

Python爬虫-汽车之家各车系周销量榜数据

前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…...

【机器学习】时序数据与序列建模:理论与实践的全面指南

云边有个稻草人-CSDN博客 目录 云边有个稻草人-CSDN博客 引言 一、时序数据的特点与挑战 1.1 时序数据的特点 1.2 序列建模的挑战 二、传统方法概览 2.1 ARIMA 模型 2.2 Prophet 三、深度学习方法 3.1 RNN 和 LSTM 3.2 Attention 和 Transformer 3.3 自监督学习 四、…...

java.net.SocketException: Connection reset 异常原因分析和解决方法

导致此异常的原因&#xff0c;总结下来有三种情况&#xff1a; 一、服务器端偶尔出现了异常&#xff0c;导致连接关闭 解决方法&#xff1a; 采用出错重试机制 二、 服务器端和客户端使用的连接方式不一致 解决方法&#xff1a; 服务器端和客户端使用相同的连接方式&#xff…...

【华为OD-E卷 - 恢复数字序列 100分(python、java、c++、js、c)】

【华为OD-E卷 - 恢复数字序列 100分&#xff08;python、java、c、js、c&#xff09;】 题目 对于一个连续正整数组成的序列&#xff0c;可以将其拼接成一个字符串&#xff0c;再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12&#xff0c;拼接成的字符串为89101112&…...

05、Redis持久化

Redis是在内存中操作的&#xff0c;我们服器关闭重启机器后&#xff0c;正常是之前在redis中操作的数据都不存在了&#xff0c;但是实际上我们开机后重新启动redis服务&#xff0c;一样可以看到之前操作的数据。这是为什么呢&#xff1f; 我们在redis的安装目录下可以看到有一…...

Python爬虫基础——selenium模块进阶(模拟鼠标操作)

主要内容包括&#xff1a;模拟鼠标操作。常用的鼠标操作有单击、双击、右击、长按、拖动、移动等&#xff0c;模拟这些操作需要用到selenium模块中的ActionChains类。该类的基本使用方法是将实例化好的WebDriver对象作参数传到该类中&#xff0c;实例化成一个ActionChains对象&…...

C++ macro: The # operator

C macro: The # operator 1. The # operator2. Stringizing (字符串化)References 1. The # operator The # operator converts a parameter of a function-like macro into a character string literal. #define STR(x) #xAll subsequent invocations of the macro STR woul…...

一学就废|Python基础碎片,文件读写

文件处理是指通过编程接口对文件执行诸如创建、打开、读取、写入和关闭等操作的过程。它涉及管理程序与存储设备上的文件系统之间的数据流&#xff0c;确保数据得到安全高效的处理。 Python 中的文件模式 打开文件时&#xff0c;我们必须指定我们想要的模式&#xff0c;该模式…...

使用MATLAB正则表达式从文本文件中提取数据

使用MATLAB正则表达式从文本文件中提取数据 使用Python正则表达式从文本文件中提取数据的代码请看这篇文章使用正则表达式读取文本数据【Python】-CSDN博客 文本数据格式 需要提取 V 后面的数据, 并绘制出曲线. index 1V 0.000000W 0.000000E_theta 0.000000UINV 0.0…...

Java基于SSM框架的在线视频教育系统小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

Git文件夹提交错了,怎么撤销?

最近提交了一些不应该提交的文件夹到git中,现在需要移除它们,现在简单记录一下操作日志: 情况一 文件夹已经被添加到 Git&#xff0c;但未提交 如果文件夹已经被 git add 添加到暂存区中&#xff0c;但尚未提交&#xff0c;你可以使用以下命令将其从暂存区中移除: git rm -r …...

Unity TextMesh Pro入门

概述 TextMesh Pro是Unity提供的一组工具&#xff0c;用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比&#xff0c;TextMesh Pro提供了更好的文本格式控制和布局管理功能。 本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功…...

大疆C++开发面试题及参考答案

虚函数的作用是什么&#xff1f;虚函数机制是如何实现的&#xff1f;虚表指针在内存中的存放位置在哪里&#xff1f; 虚函数主要用于实现多态性。多态是面向对象编程中的一个重要概念&#xff0c;它允许通过基类指针或引用调用派生类中重写的函数。这样可以在运行时根据对象的实…...

极品飞车6里的赛道简介

极品飞车里有很多赛道,赛道分为前向赛道Forward、后向赛道Backward。前向赛道Forward是从A点到B点;后向赛道Backward是前向赛道的逆过程,即从B点到A点。这里介绍极品飞车6的赛道长度、中英文名称翻译、难度等级。 序号赛道英文名赛道中文名总长(km)急弯难度等级1Alpine Trai…...

Swagger学习⑰——@Link注解

介绍 Link 是 Swagger/OpenAPI 3.0 注解库中的一个注解&#xff0c;用于在 OpenAPI 文档中定义链接&#xff08;Link&#xff09;。链接是一种在 API 响应中提供相关操作或资源引用的机制&#xff0c;通常用于描述操作之间的关系或提供额外的操作提示。 Link 注解的作用 Link…...

Cline(原Claude Dev)开源的IDE AI插件,如何搭配OpenRouter实现cursor功能,Cline怎么使用

Cline&#xff08;原Claude Dev&#xff09;是一个开源的IDE AI插件&#xff0c;可以使用你的命令行界面和编辑器的人工智能助手。 你可以直接在VS Code编辑器进行安装。如果你使用过Cursor AI IDE的话&#xff0c;可以尝试最新发布的Cline3.1版本。 在OpenRouter上&#xff0…...

WEB前端-3.1

目录 CSS部分 什么是CSS CSS的书写方式 网页引入CSS的方式 css的颜色、大小、边线 文本和字体样式 CSS选择器 属性选择器 伪类选择器 伪元素选择器 文本样式 display属性 背景样式 精灵图、雪碧图 元素定位 绝对定位 相对定位 浮动定位 浮动 CSS部分 什么是…...

灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设

项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程&#xff0c;该灌区覆盖广阔&#xff0c;灌溉面积高达7.5万亩&#xff0c;地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设&#xff0c;强力推动节水灌溉措施的实施&#xff0c;旨在显著提升农业用水的…...

QT中引入OpenCV库总结(qmake方式和cmake方式)

文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境&#xff0c;写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...

【DAPM杂谈之三】DAPM的初始化流程

本文主要分析DAPM的设计与实现 内核的版本是&#xff1a;linux-5.15.164&#xff0c;下载链接&#xff1a;Linux内核下载 主要讲解有关于DAPM相关的知识&#xff0c;会给出一些例程并分析内核如何去实现的 /**************************************************************…...

消息队列架构、选型、专有名词解释

私人博客传送门 消息队列专有名词解释 | 魔筝炼药师 MQ选型 | 魔筝炼药师 MQ架构 | 魔筝炼药师 MQ顺序消息 | 魔筝炼药师...

Scala语言的计算机基础

Scala语言的计算机基础 Scala是一种现代的编程语言&#xff0c;兼具面向对象和函数式编程的特性&#xff0c;广泛应用于大数据处理、后端开发和分布式系统等领域。本文将围绕Scala语言的基础知识&#xff0c;包括其语法特点、数据结构、函数式编程思想、与Java的关系以及在实际…...

爬虫基础之爬取歌曲宝歌曲批量下载

声明&#xff1a;本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…...

书说 MySQL 的悲观锁和乐观锁

什么是乐观锁&#xff1f;什么是悲观锁&#xff1f; 悲观锁&#xff1a; 悲观锁是一种基于悲观态度的控制机制&#xff08;最坏的程度想&#xff0c;每次并发一定会造成阻塞&#xff09;&#xff0c;用于防止数据冲突。它采取预防性措施&#xff0c;在修改数据之前将其锁定&a…...

Linux WEB漏洞

定义&#xff1a;Linux Web 漏洞是指在基于 Linux 操作系统的 Web 应用程序、Web 服务器软件或者相关的网络服务配置中存在的安全弱点。这些漏洞可能导致攻击者未经授权访问敏感信息、篡改网页内容、执行恶意代码&#xff0c;甚至完全控制服务器。 常见类型及原理 SQL 注入漏…...

AIDD - 人工智能药物设计 -深度学习赋能脂质纳米颗粒设计,实现高效肺部基因递送

Nat. Biotechnol. | 深度学习赋能脂质纳米颗粒设计&#xff0c;实现高效肺部基因递送 今天为大家介绍的是来自美国麻省理工和爱荷华大学卡弗医学院团队的一篇论文。可离子化脂质&#xff08;ionizable lipids&#xff09;是脂质纳米颗粒&#xff08;lipid nanoparticles&#…...

Selenium 进行网页自动化操作的一个示例,绕过一些网站的自动化检测。python编程

初级教程 selenium 教程和视频教程s原理与安装 - 白月黑羽 https://www.byhy.net/auto/selenium/01/#chrome%201 Selenium 自动化环境安装_哔哩哔哩_bilibili Selenium 自动化环境安装是Python Selenium Web自动化 2024版 - 自动化测试 爬虫的第2集视频&#xff0c;该合集共…...

力扣 岛屿数量

从某个点找&#xff0c;不断找相邻位置。 题目 岛屿中被“0”隔开后 &#xff0c;是每一小块状的“1”&#xff0c;本题在问有多少块。可以用dfs进行搜索&#xff0c;遍历每一个点&#xff0c;把每一个点的上下左右做搜索检测&#xff0c;当检测到就标记为“0”表示已访问过&a…...

【前端动效】HTML + CSS 实现打字机效果

目录 1. 效果展示 2. 思路分析 2.1 难点 2.2 实现思路 3. 代码实现 3.1 html部分 3.2 css部分 3.3 完整代码 4. 总结 1. 效果展示 如图所示&#xff0c;这次带来的是一个有趣的“擦除”效果&#xff0c;也可以叫做打字机效果&#xff0c;其中一段文本从左到右逐渐从…...

期刊(中英),期刊分区,期刊所在数据库(中英),出版商区别和联系

目录 对期刊、分区、数据库、出版商整体了解期刊&#xff08;中英&#xff09;期刊分区期刊所在数据库总结 出版商 对期刊、分区、数据库、出版商整体了解 下图是我对这四部分的一个理解&#xff0c;其中期刊根据论文使用语言分为中英两种&#xff0c;期刊分区是用来评判论文质…...

LLM中temperature参数设置为0

LLM中 temperature参数设置为0 当模型的temperature参数设置为0时&#xff0c;通常有以下含义&#xff1a; 解码策略角度 意味着采用贪婪解码&#xff08;greedy decoding&#xff09;策略。在每一步生成文本时&#xff0c;模型会选择概率最高的词元&#xff0c;从而使输出具…...

Javase 基础复习 函数式接口 lambda表达式 方法应用

目录 案例1 案例2 1. 函数式接口 (Functional Interface) 特点&#xff1a; 示例&#xff1a; Java 8 引入了几个常用的函数式接口&#xff1a; 2. Lambda 表达式 语法解析&#xff1a; 示例&#xff1a; 3. 方法引用 (Method References) 示例&#xff1a; 4. 方法…...

【39. 组合总和 中等】

题目&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限…...

UE小白学习日记

Level UE中的Level(关卡)和Unity中的Scene(场景)在概念和用途上非常相似,都是用来组织和管理3D环境的基本单位。让我为您详细对比一下: 相似之处: 它们都是游戏世界的容器,可以包含游戏对象、光照、地形等元素都支持场景/关卡的切换和加载都可以用来划分游戏内容,比如不同关…...

补充之前的一篇 MySQL 的索引为什么能加快查询速度

在之前的一篇文章中写了 MySQL 的索引为什么能加快查询速度&#xff0c;结合这两篇文章&#xff0c;相信你会对 MySQL 的索引有更深一步的了解 ​首先我们要理解一件事&#xff0c;无论什么数据库&#xff0c;它的数据一定都是存储在硬盘中的&#xff0c;而硬盘和内存之间的读…...

GoLand下载安装教程

一、goland环境配置 1.下载地址 https://golang.google.cn/dl/ 2.下载安装 3.添加环境变量 4.测试环境变量 输出Hello,World! 说明环境配置成功 二、goland安装 1.下载安装 https://www.jetbrains.com/go/download/download-thanks.html 2.激活使用 SFXUSA86FM-eyJsaWNlbnNl…...

GAN的应用

5、GAN的应用 ​ GANs是一个强大的生成模型&#xff0c;它可以使用随机向量生成逼真的样本。我们既不需要知道明确的真实数据分布&#xff0c;也不需要任何数学假设。这些优点使得GANs被广泛应用于图像处理、计算机视觉、序列数据等领域。上图是基于GANs的实际应用场景对不同G…...

[石榴翻译] 维吾尔语音识别 + TTS语音合成

API网址 丝路AI平台 获取 Access token 接口地址&#xff1a;https://open.xjguoyu.cn/api/auth/oauth/token&#xff0c;请求方式&#xff1a;GET&#xff0c;POST Access token是调用服务API的凭证&#xff0c;调用服务API之前需要获取 token。每次成功获取 token 以后只有…...

PHP Filesystem:深入解析与实战应用

PHP Filesystem:深入解析与实战应用 引言 PHP作为一种流行的服务器端编程语言,提供了强大的文件系统操作功能。本文将深入探讨PHP的Filesystem函数,这些函数允许开发者访问和操作服务器上的文件系统。无论是进行基本的文件操作,还是实现复杂的文件管理系统,PHP的Filesys…...

仓颉笔记——写一个简易的web服务并用浏览器打开

创建一个web服务端&#xff0c;同时创建一个客户端去读取这个服务端。 也满足浏览器打开web的需求。 直接上代码。 import net.http.* import std.time.* import std.sync.* import std.log.LogLevel// 1. 构建 Server 实例 let server ServerBuilder().addr("127.0.0.1&…...

yolov5+colab跑起来

教程1.先上传网盘再run 教程2.直接上传解压run 本人过程...

Windows下安装最新版的OpenSSL,并解决OpenSSL不是当前版本的问题,或者安装不正确的问题

文章目录 1. 文章引言1.1 需求描述1.2 简单介绍1.3 支持平台1.4 源码地址1.5 组件介绍2. 下载OpenSSL3. 安装OpenSSL5. 查看安装目录6. 解决OpenSSL的错误1. 文章引言 1.1 需求描述 今天接到一需求,解密php加密后的数据,由于php使用 openssl_encrypt的方式加密,java也需要使…...