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

《Python加解密小实验:探索数据加密与解密的世界》

铺垫(1)-源码

import hashlib
source = "你好"
# print(hashlib.md5(source.encode()).hexdigest())# 文件加解密
with open('../文件引用/index.png', 'rb') as file:data = file.read()
# print(hashlib.md5(data).hexdigest())# SHA也是摘要算法
# print(hashlib.sha256(source.encode()).hexdigest())

铺垫(1)-源码解析

这段代码主要演示了如何使用Python的hashlib库来计算字符串和文件的哈希值

代码解析

  1. 导入库:

import hashlib

这行代码导入了Python的hashlib库,该库提供了多种哈希算法,如MD5, SHA1, SHA256等。 2. 字符串哈希:

source = "你好"
# print(hashlib.md5(source.encode()).hexdigest())

这里定义了一个字符串source,其值为"你好"。接下来的注释代码展示了如何计算该字符串的MD5哈希值。

* `source.encode()`: 将字符串转换为字节串,因为`hashlib`的哈希函数需要字节串作为输入。
* `hashlib.md5(...)`: 创建一个MD5哈希对象。
* `.hexdigest()`: 计算哈希值并返回其十六进制表示。
  1. 文件哈希:

with open('../文件引用/index.png', 'rb') as file:data = file.read()
# print(hashlib.md5(data).hexdigest())

这部分代码打开了一个名为index.png的文件,并读取了其内容到变量data中。接下来的注释代码展示了如何计算该文件内容的MD5哈希值。

* `'rb'`: 以二进制模式打开文件,确保文件内容被正确读取。
  1. SHA256哈希:

# SHA也是摘要算法
# print(hashlib.sha256(source.encode()).hexdigest())

这部分代码展示了如何使用SHA256算法计算字符串"你好"的哈希值。与MD5类似,但SHA256提供了更高的安全性。

注意事项

  • 哈希算法是单向的,这意味着你不能从哈希值中恢复原始数据。

  • 不同的哈希算法有不同的输出长度和安全性。例如,MD5的输出长度为128位,而SHA256的输出长度为256位。

  • 哈希算法通常用于验证数据的完整性,而不是加密数据。因为哈希算法是单向的,所以它们不适合用于需要解密数据的场景。

总结

这段代码主要演示了如何使用Python的hashlib库来计算字符串和文件的哈希值。哈希算法是单向的,主要用于验证数据的完整性。

铺垫(2)-源码

source = 'DSFASsafdasf42343'  # dsfasSAFDASF53454
result = ''
for i in source:if ord(i) in range(65, 91):temp = chr(ord(i) + 32)elif ord(i) in range(97, 123):temp = chr(ord(i) - 32)elif ord(i) in range(48, 58):temp = chr(ord(i) + 1)# temp = chr(ord()-1)  # 解密算法result += temp
# print(result)

铺垫(2)-源码解析

这段代码的主要目的是对一个字符串source进行简单的加密处理

  1. 初始化:

    • source 是一个给定的字符串,其值为 'DSFASsafdasf42343'。

    • result 是一个空字符串,用于存储加密后的结果。

  2. 遍历字符串: 使用for循环遍历source中的每一个字符i

  3. 条件判断与加密:

    • 如果字符i的ASCII值在65到90之间(即大写字母A-Z),则将其转换为对应的小写字母。这是通过获取字符i的ASCII值,加32(因为小写字母比对应的大写字母的ASCII值大32),然后再转换回字符来实现的。

    • 如果字符i的ASCII值在97到122之间(即小写字母a-z),则将其转换为对应的大写字母。这是通过获取字符i的ASCII值,减32,然后再转换回字符来实现的。

    • 如果字符i的ASCII值在48到57之间(即数字0-9),则将其转换为下一个数字。例如,'9'会变成':'(这不是一个数字,而是一个冒号字符,因为ASCII值57+1=58,对应的字符是':')。这里有一个注释掉的行# temp = chr(ord()-1) # 解密算法,这行代码如果取消注释,会将数字减1而不是加1,从而实现解密。

  4. 拼接结果: 将转换后的字符temp添加到result字符串中。

  5. 输出: 最后,打印加密后的字符串result。但需要注意的是,代码中最后一行print(result)被注释掉了,所以如果直接运行这段代码,不会有任何输出。要看到结果,需要取消这一行的注释。

注意:这段代码并不是一个真正的加密算法,因为它很容易被破解。例如,大写字母总是转换为小写字母,小写字母总是转换为大写字母,数字总是增加1(或减少1)。这种转换模式是固定的,所以很容易通过观察和分析来破解。

如果想要一个真正的加密算法,建议使用像AES、RSA这样的成熟加密算法,这些算法提供了更高的安全性。

铺垫(3)-源码

import stringupper_list = string.ascii_uppercase
lower_list = string.ascii_lowercase# 凯撒加密右移5位
upper_dest = ''
for i in upper_list:index = (upper_list.index(i) + 5) % len(upper_list)print(upper_list[index], end=' ')upper_dest += upper_list[index]
print()
# 凯撒加密右移5位
for i in upper_dest:index = upper_dest.index(i) - 5print(upper_dest[index], end=' ')

铺垫(3)-源码解析

这段代码实现了凯撒加密(Caesar cipher)的一种形式,具体是对英文字母进行右移5位的加密,然后又进行了相应的解密

代码解析

  1. 导入模块:

import string

导入了Python的string模块,该模块包含了一些常用的字符串常量,如所有的ASCII字母。 2. 定义字母列表:

upper_list = string.ascii_uppercase
lower_list = string.ascii_lowercase

upper_list包含了所有的大写英文字母,而lower_list包含了所有的小写英文字母。 3. 凯撒加密右移5位:

upper_dest = ''
for i in upper_list:index = (upper_list.index(i) + 5) % len(upper_list)print(upper_list[index], end=' ')upper_dest += upper_list[index]
print()

这部分代码实现了对大写字母的凯撒加密右移5位:

* 初始化一个空字符串`upper_dest`来存储加密后的结果。
* 遍历`upper_list`中的每一个字符`i`。
* 使用`upper_list.index(i)`找到字符`i`在`upper_list`中的索引位置,然后加5得到新的索引位置。使用模运算`% len(upper_list)`确保索引不会超出列表的范围。
* 使用新的索引位置从`upper_list`中获取加密后的字符,并打印它(后面跟一个空格)。
* 将加密后的字符添加到`upper_dest`字符串中。
* 最后打印一个换行符。
  1. 凯撒解密左移5位: 注意:虽然代码注释说是“凯撒加密右移5位”,但这段代码实际上是进行了解密操作,即左移5位。

for i in upper_dest:index = upper_dest.index(i) - 5print(upper_dest[index], end=' ')

这部分代码实现了对加密后的字符串upper_dest的解密(左移5位):

* 遍历`upper_dest`中的每一个字符`i`。
* 使用`upper_dest.index(i)`找到字符`i`在`upper_dest`中的索引位置,然后减5得到原始字符在`upper_dest`中的索引位置(因为之前加了5位进行加密)。
* 使用这个索引位置从`upper_dest`中获取原始字符,并打印它(后面跟一个空格)。

注意

  1. 这段代码只处理了大写字母。如果要处理小写字母,你需要对lower_list执行类似的操作。

  2. 凯撒加密是一种简单的替换加密方法,它很容易被破解。因此,在实际应用中,不建议使用凯撒加密来保护敏感信息。

  3. 在解密部分,代码假设加密是通过右移5位实现的。如果加密是通过其他方式实现的,解密部分可能不会正常工作。

铺垫(4)-源码

list = []
for i in upper:list.append(i)
# print(list)
list2 = ['F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','A', 'B', 'C', 'D', 'E']
# 凯撒加密,右位移5
for i in list:index = (list.index(i) + 5) % len(list)# print(list[index], end=' ')
# 凯撒解密,左位移5,python特有下标取负数,不需要取余
for i in list2:index = list.index(i) - 5print(list[index], end=' ')

铺垫(4)-源码解析

这段代码实现了凯撒加密(Caesar cipher)的加密和解密过程

代码解析

  1. 初始化列表:

    • list = []: 创建一个空列表list

    • for i in upper: list.append(i): 这段代码似乎是从一个名为upper的字符串或列表中获取所有字符,并将它们添加到list中。但请注意,upper在这段代码中没有定义,可能是在代码的其他部分定义的。

    • list2: 这是一个包含所有大写字母的列表,但它跳过了'F'到'J'之间的字母,并从'K'开始。这似乎是一个错误,因为通常凯撒加密会处理所有的字母。不过,这段代码可能是为了演示某种特定的移位情况。

  2. 凯撒加密:

    • for i in list: index = (list.index(i) + 5) % len(list): 这段代码遍历list中的每个字符,并计算其在列表中的新位置,新位置是当前位置加5并对列表长度取模。这是凯撒加密的核心思想,即将字母表中的每个字母移动固定的位置数。

    • 注:print(list[index], end=' '): 这行代码被注释掉了,如果取消注释,它会打印加密后的字符。

  3. 凯撒解密:

    • for i in list2: index = list.index(i) - 5: 这段代码遍历list2中的每个字符,并计算其在list中的原始位置,原始位置是当前位置减5。这是凯撒解密的核心思想,即将字母表中的每个字母移动回其原始位置。

    • print(list[index], end=' '): 这行代码打印解密后的字符。

注意事项

  1. upper未定义: 代码中的upper变量没有在这段代码中定义。它可能是在代码的其他部分定义的,或者这是一个遗漏。

  2. list2的错误: list2似乎是一个错误的字母表,因为它跳过了'F'到'J'之间的字母。这可能会导致解密过程出现问题。

  3. 效率问题: 使用list.index(i)来查找字符的位置可能不是最高效的方法,特别是当列表很大时。一个更好的方法是使用字典来存储字符和其位置的映射。

  4. 代码注释: 代码中有一些有用的注释,但也有一些被注释掉的代码。为了更清晰地理解代码,建议删除不必要的注释,并确保所有重要的代码都是可见的。

修改后的代码示例

下面是一个修改后的代码示例,修复了上述提到的一些问题:

# 定义大写字母列表
upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'# 初始化加密列表和解密列表
encrypted_list = []
decrypted_list = []# 凯撒加密,右位移5
for char in upper:index = (upper.index(char) + 5) % len(upper)encrypted_char = upper[index]encrypted_list.append(encrypted_char)# 打印加密后的列表
print("Encrypted:", ''.join(encrypted_list))# 凯撒解密,左位移5
for char in encrypted_list:index = (upper.index(char) - 5) % len(upper)decrypted_char = upper[index]decrypted_list.append(decrypted_char)# 打印解密后的列表
print("Decrypted:", ''.join(decrypted_list))

这个修改后的代码更清晰、更完整,并且修复了原始代码中的一些问题。

完整实现-源码

import stringupper_list = string.ascii_uppercase
lower_list = string.ascii_lowercasedef encrypt_zhang(source):# 对大小写字母右移6位dest = ''for i in source:# 如果是大写的情况if i in upper_list:index = (upper_list.index(i) + 6) % len(upper_list)dest += upper_list[index]elif i in lower_list:index = (lower_list.index(i) + 6) % len(lower_list)dest += lower_list[index]return dest# 对字母大小写转换(加解密同源)
def convert_li(source):dest = ''for i in source:if ord(i) in range(65, 91):dest += chr(ord(i) + 32)elif ord(i) in range(97, 123):dest += chr(ord(i) - 32)return dest# 对encrypt_zhang解密,大小写左移6位
def decrypt_zhang(source):dest = ''for i in source:if i in upper_list:index = upper_list.index(i) - 6dest += upper_list[index]elif i in lower_list:index = lower_list.index(i) - 6dest += lower_list[index]return destif __name__ == '__main__':result1 = encrypt_zhang('ZHANGsan')print(result1)result2 = convert_li(result1)print(result2)result3 = decrypt_zhang(result2)print(result3)result4 = convert_li(result3)print(result4)

完整实现-源码解析

这段代码定义了两个加密/解密函数encrypt_zhangdecrypt_zhang,以及一个大小写转换函数convert_li

  1. 导入模块:

import string

导入了Python的string模块,该模块包含了一些常用的字符串常量和函数。 2. 定义字母列表:

upper_list = string.ascii_uppercase
lower_list = string.ascii_lowercase

upper_list包含了所有的大写英文字母,而lower_list包含了所有的小写英文字母。 3. encrypt_zhang函数: 这个函数实现了对输入字符串source中的每个字母进行右移6位的加密操作。

* 如果字母是大写的,则在`upper_list`中找到其位置,然后加6并取模得到新的位置,从而获取加密后的字母。
* 如果字母是小写的,则在`lower_list`中做类似的操作。
* 其他非字母字符不会被加密。
  1. convert_li函数: 这个函数实现了大小写转换的功能。

    • 如果字母是大写的(ASCII值在65-90之间),则将其转换为小写。

    • 如果字母是小写的(ASCII值在97-122之间),则将其转换为大写。

    • 其他非字母字符不会被转换。

  2. decrypt_zhang函数: 这个函数是encrypt_zhang的逆操作,实现了对输入字符串source中的每个字母进行左移6位的解密操作。其逻辑与encrypt_zhang相似,只是方向相反。

  3. 主程序:

    • 首先,使用encrypt_zhang函数加密字符串'ZHANGsan',并打印结果。

    • 然后,使用convert_li函数将加密后的字符串的大小写进行转换,并打印结果。

    • 接着,使用decrypt_zhang函数对上一步得到的字符串进行解密,并打印结果。

    • 最后,再次使用convert_li函数将解密后的字符串的大小写进行转换,并打印结果。

注意:虽然这段代码在逻辑上是正确的,但在实际应用中,这种简单的移位加密方法(如凯撒密码)并不安全,容易被破解。对于需要高安全性的场景,应使用更复杂的加密算法。

另外,这段代码中的encrypt_zhangdecrypt_zhang函数只处理了英文字母,对于其他字符(如数字、标点符号等)则不做处理。如果需要处理这些字符,可以在函数中添加相应的逻辑。

相关文章:

《Python加解密小实验:探索数据加密与解密的世界》

铺垫(1)-源码 import hashlib source "你好" # print(hashlib.md5(source.encode()).hexdigest())# 文件加解密 with open(../文件引用/index.png, rb) as file:data file.read() # print(hashlib.md5(data).hexdigest())# SHA也是摘要算法…...

C高级day四shell脚本

1.思维导图 2.终端输入一个C源文件名(.c结尾)判断文件是否有内容,如果没有内容删除文件,如果有内容编译并执行该文件。 #!/bin/bashread -p "请输入一个.c脚本名:" n if [ -s "$n" ] thenecho $n…...

android studio 写一个小计时器(版本二)

as版本&#xff1a;23.3.1patch2 例程&#xff1a;timer 在前一个版本的基本上改的&#xff0c;增加了继续的功能&#xff0c;实现方法稍微不同。 动画演示&#xff1a; activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx…...

【网络安全实验室】SQL注入实战详情

如果额头终将刻上皱纹&#xff0c;你只能做到&#xff0c;不让皱纹刻在你的心上 1.最简单的SQL注入 查看源代码&#xff0c;登录名为admin 最简单的SQL注入&#xff0c;登录名写入一个常规的注入语句&#xff1a; 密码随便填&#xff0c;验证码填正确的&#xff0c;点击登录…...

华为,新华三,思科网络设备指令

1. 设备信息查看 华为 display version # 查看设备版本信息 display device # 查看设备硬件信息 新华三&#xff08;H3C&#xff09; display version # 查看设备版本信息 display device # 查看设备硬件信息 锐捷 show version …...

WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑&#xff1a; while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在执行函数内部&#xff0c;就是一个while死循环&#xff0c;只做两件事&#xff0c;从队列里Get取…...

Day3 微服务 微服务保护(请求限流、线程隔离、服务熔断)、Sentinel微服务保护框架、分布式事务(XA模式、AT模式)、Seata分布式事务框架

目录 1.微服务保护 1.1.服务保护方案 1.1.1 请求限流 1.1.2 线程隔离 1.1.3 服务熔断 1.2 Sentinel 1.2.1.介绍和安装 1.2.2 微服务整合 1.2.2.1 引入sentinel依赖 1.2.2.2 配置控制台 1.2.2.3 访问cart-service的任意端点 1.3 请求限流 1.4 线程隔离 1.4.1 OpenFeign整合Senti…...

第9章 子程序与函数调用

汇编语言是一种低级编程语言&#xff0c;它几乎是一对一地映射到计算机的机器码指令。在汇编语言中实现循环结构通常涉及到使用条件跳转指令&#xff08;如 JMP、JE、JNE 等&#xff09;来控制程序流程。下面我将通过一个简单的例子来讲解如何用x86汇编语言实现一个循环结构。 …...

manacher算法

Manacher 算法快速入门 Manacher 算法是一种用于寻找字符串中最长回文子串的高效算法&#xff0c;时间复杂度为 O(n)。 基本概念 回文 回文是一个字符串&#xff0c;从左到右和从右到左读都一样。 示例&#xff1a; 回文&#xff1a;"aba"、"abba"非回…...

Cocos2dx Lua绑定生成中间文件时参数类型与源码类型不匹配

这两天维护的一个项目&#xff0c;使用arm64-v8a指令集编译时遇到了报错&#xff0c;提示类型不匹配&#xff0c;具体报错的代码【脚本根据C源文件生成的中间文件】如下&#xff1a; const google::protobuf::RepeatedField<unsigned long long>& ret cobj->equi…...

为什么需要 std::call_once?

std::call_once 是 C 标准库中的一个函数&#xff0c;用来确保某个操作仅被执行一次&#xff0c;通常用于线程安全的初始化操作。它常与 std::once_flag 结合使用&#xff0c;后者用于标记某个操作是否已经执行过。 为什么需要 std::call_once&#xff1f; 在多线程程序中&am…...

ubuntu非root用户操作root权限问题-virbox挂在共享文件夹

首先讲一下&#xff0c;virtuallbox 挂在文件夹&#xff0c;操作的时候总是需要root权限&#xff0c;比较费劲。 这一操作其实也正对着我们在Ubuntu上的操作。 前段时间我想在ubuntu正常用户下去操作i2c&#xff0c;也出现了类似的问题。 后来把正常的操作加到组里面也解决了类…...

网络通讯协议

层次协议应用层HTTP, HTTPS, FTP, SMTP, POP3, IMAP, DNS, DHCP, SNMP, Telnet, SSH, SIP, RTP, RTCP, TFTP, NTP, ICMP, IGMP传输层TCP, UDP网络层IP, ICMP, IGMP数据链路层Ethernet, PPP, HDLC, ATM, Frame Relay ISO/OSI 参考模型协议应用层HTTP, HTTPS, FTP, SMTP, POP3, …...

centos,789使用mamba快速安装devtools

如何进入R语言运行环境请参考&#xff1a;Centos7_miniconda_devtools安装_R语言入门之R包的安装_r语言devtools包怎么安装-CSDN博客 在R里面使用安装devtools经常遇到依赖问题&#xff0c;排除过程过于费时&#xff0c;使用conda安装包等待时间长等。下面演示centos,789都是一…...

【人工智能机器学习基础篇】——深入详解强化学习之常用算法Q-Learning与策略梯度,掌握智能体与环境的交互机制

深入详解强化学习之常用算法&#xff1a;Q-Learning与策略梯度 强化学习&#xff08;Reinforcement Learning, RL&#xff09;作为机器学习的一个重要分支&#xff0c;近年来在多个领域取得了显著成果。从棋类游戏的人机对战到自主驾驶汽车&#xff0c;强化学习技术展示了其强大…...

银河麒麟桌面v10sp1修复引导笔记

1.安装双系统最好备份esp分区&#xff0c;uefi引导丢失可以用diskgen,选择工具再点击设置uefi bios&#xff0c;鼠标右键选择efi文件。 2.银河麒麟界面添加windows&#xff0c;复制EFI/Microsoft或者pe生成引导文件后&#xff0c;修复Windows引导用下面命令 /桌面# update-gru…...

深入理解 MVCC 与 BufferPool 缓存机制

深入理解 MVCC 与 BufferPool 缓存机制 在 MySQL 数据库中&#xff0c;MVCC&#xff08;Multi-Version Concurrency Control&#xff09;多版本并发控制机制和 BufferPool 缓存机制是非常重要的概念&#xff0c;它们对于保证数据的一致性、并发性以及提升数据库性能起着关键作用…...

vue实现下拉多选、可搜索、全选功能

最后的效果就是树形的下拉多选&#xff0c;可选择任意一级选项&#xff0c;下拉框中有一个按钮可以实现全选&#xff0c;也支持搜索功能。 在mounted生命周期里面获取全部部门的数据&#xff0c;handleTree是讲接口返回的数据整理成树形结构&#xff0c;可以自行解决 <div c…...

探秘Kafka源码:关键内容解析

文章目录 一、以kafka-3.0.0为例1.1安装 gradle 二、生产者源码2.1源码主流程图2.2 初始化2.3生产者sender线程初始化2.4 程序入口2.5生产者 main 线程初始化2.6 跳转到 KafkaProducer构造方法 一、以kafka-3.0.0为例 打开 IDEA&#xff0c;点击 File->Open…->源码包解…...

Android音频效果处理:基于`android.media.audiofx`包的原理、架构与实现

Android音频效果处理:基于android.media.audiofx包的原理、架构与实现 目录 引言Android音频框架概述android.media.audiofx包简介音频效果处理的原理 4.1 音频信号处理基础4.2 常见音频效果android.media.audiofx的架构设计 5.1 类结构分析5.2 设计模式应用系统定制与扩展 6…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...