深入探究C语言中的二进制世界:从原理到实践
文章目录
- 深入探究C语言中的二进制世界:从原理到实践
- 一、进制的本质与C语言实现
- 1. 进制系统全景
- 2. C语言中的进制表示
- 3. 格式化输出进阶
- 二、进制转换的工程实践
- 1. 转换算法实现
- 2. 实际应用中的转换技巧
- 快速二进制 - 十六进制转换
- 位运算优化转换
- 3. 进制转换详细示例
- 二进制 ↔ 十进制转换
- 二进制转十进制
- 十进制转二进制
- 十六进制 ↔ 十进制转换
- 十六进制转十进制
- 十进制转十六进制
- 二进制 ↔ 十六进制转换
- 二进制转十六进制
- 十六进制转二进制
- 三、计算机数值表示深度解析
- 1. 机器数和真值
- 机器数
- 真值
- 2. 原码、反码、补码的系统对比
- 3. 原码/反码/补码详解示例
- 原码表示案例(8位)
- 反码表示案例
- 补码表示案例
- 4. 补码的工程意义
- 硬件简化
- 数值范围优化
- 实际案例分析
- 四、实战应用与性能优化
- 1. 位字段与硬件交互
- 2. 高效位操作技巧
- 五、常见陷阱与最佳实践
- 1. 典型错误案例
- 2. 防御性编程建议
- 六、扩展知识与应用前沿
- 1. 浮点数的二进制表示
- 2. 现代处理器的二进制优化
- 总结与展望
深入探究C语言中的二进制世界:从原理到实践
在计算机科学中,二进制是信息表示的基石。作为C语言开发者,深入理解二进制及相关概念不仅能帮助我们编写更高效的代码,还能提升调试和优化程序的能力。本文将系统性地介绍C语言中的二进制知识体系,从基础概念到实际应用。
一、进制的本质与C语言实现
1. 进制系统全景
计算机科学中常见的四种进制各有特点和应用场景:
进制 | 基数 | 数字符号 | 典型应用场景 |
---|---|---|---|
二进制 | 2 | 0,1 | 计算机底层运算、位操作 |
八进制 | 8 | 0 - 7 | Unix文件权限、历史系统 |
十进制 | 10 | 0 - 9 | 日常计算、用户界面 |
十六进制 | 16 | 0 - 9,A - F | 内存地址、颜色编码、调试 |
2. C语言中的进制表示
C语言提供了直观的语法支持不同进制的数值表示:
int binary = 0b1010; // 二进制,C99标准起支持
int octal = 012; // 八进制
int decimal = 10; // 十进制
int hex = 0xA; // 十六进制
实际应用示例:
// 嵌入式开发中的寄存器配置
#define PORT_CONFIG 0x1F // 使用十六进制设置端口配置
#define BIT_MASK 0b00001111 // 使用二进制定义位掩码// 文件权限设置(Unix风格)
const int RWX_MODE = 0755; // 八进制表示文件权限
3. 格式化输出进阶
C语言提供了丰富的格式说明符用于不同进制的输出:
#include <stdio.h>int main() {int num = 255;printf("十进制: %d\n", num);printf("八进制: %o\n", num); // 377printf("十六进制: %x\n", num); // ffprintf("十六进制(大写): %X\n", num); // FF// 控制输出格式printf("带前缀的十六进制: %#x\n", num); // 0xffprintf("带前缀的八进制: %#o\n", num); // 0377return 0;
}
二进制输出实用方案:
void print_binary(unsigned int num) {for (int i = sizeof(num)*8 - 1; i >= 0; i--) {putchar((num & (1u << i)) ? '1' : '0');if (i % 4 == 0 && i != 0) putchar(' '); // 每4位加空格提高可读性}putchar('\n');
}// 使用示例
print_binary(0xABCD); // 输出: 1010 1011 1100 1101
二、进制转换的工程实践
1. 转换算法实现
十进制转任意进制(2 - 16)的通用函数:
#include <stdio.h>
#include <string.h>void convert_base(int num, int base, char* result) {const char digits[] = "0123456789ABCDEF";char buffer[32] = {0};int i = 0;if (base < 2 || base > 16) {strcpy(result, "Invalid base");return;}do {buffer[i++] = digits[num % base];num /= base;} while (num != 0);// 反转字符串int len = i;for (int j = 0; j < len; j++) {result[j] = buffer[len - j - 1];}result[len] = '\0';
}// 使用示例
int main() {char result[32];convert_base(255, 16, result);printf("255 in hex: %s\n", result); // 输出 FFreturn 0;
}
2. 实际应用中的转换技巧
快速二进制 - 十六进制转换
- 利用十六进制每个数字对应4位二进制的特性
- 记忆常用对应关系:
0:0000 4:0100 8:1000 C:1100
1:0001 5:0101 9:1001 D:1101
2:0010 6:0110 A:1010 E:1110
3:0011 7:0111 B:1011 F:1111
位运算优化转换
// 快速提取十六进制各位
uint32_t num = 0xABCD1234;
uint8_t nibble1 = (num >> 28) & 0xF; // A
uint8_t nibble2 = (num >> 24) & 0xF; // B
3. 进制转换详细示例
二进制 ↔ 十进制转换
二进制转十进制
二进制转十进制的方法是将二进制数按位权展开,每一位乘以2的相应次幂(次幂从右至左,从0开始递增),然后将所有结果相加。例如,对于二进制数 b n b n − 1 ⋯ b 1 b 0 b_{n}b_{n - 1}\cdots b_{1}b_{0} bnbn−1⋯b1b0,其对应的十进制数为 b n × 2 n + b n − 1 × 2 n − 1 + ⋯ + b 1 × 2 1 + b 0 × 2 0 b_{n}\times2^{n}+b_{n - 1}\times2^{n - 1}+\cdots +b_{1}\times2^{1}+b_{0}\times2^{0} bn×2n+bn−1×2n−1+⋯+b1×21+b0×20。
案例1:二进制转十进制
二进制数:1101 0110
计算过程:
1×2⁷ + 1×2⁶ + 0×2⁵ + 1×2⁴ + 0×2³ + 1×2² + 1×2¹ + 0×2⁰
= 128 + 64 + 0 + 16 + 0 + 4 + 2 + 0
= 214验证代码:
printf("%d\n", 0b11010110); // 输出214
十进制转二进制
十进制转二进制可以使用除2取余法,即将十进制数不断除以2,记录每次的余数,直到商为0,然后将余数从下往上排列,得到的就是对应的二进制数。
案例2:十进制转二进制
十进制数:173
计算过程:
173 ÷ 2 = 86 余 1 ↑
86 ÷ 2 = 43 余 0 ↑
43 ÷ 2 = 21 余 1 ↑
21 ÷ 2 = 10 余 1 ↑
10 ÷ 2 = 5 余 0 ↑
5 ÷ 2 = 2 余 1 ↑
2 ÷ 2 = 1 余 0 ↑
1 ÷ 2 = 0 余 1 ↑
读取余数:10101101验证:
print_binary(173); // 输出10101101
十六进制 ↔ 十进制转换
十六进制转十进制
十六进制转十进制的方法是将十六进制数按位权展开,每一位乘以16的相应次幂(次幂从右至左,从0开始递增),然后将所有结果相加。十六进制中,A - F 分别对应十进制的 10 - 15。
案例1:十六进制转十进制
十六进制数:0x3FA
计算过程:
3×16² + 15×16¹ + 10×16⁰
= 768 + 240 + 10
= 1018验证代码:
printf("%d\n", 0x3FA); // 输出1018
十进制转十六进制
十进制转十六进制可以使用除16取余法,即将十进制数不断除以16,记录每次的余数,直到商为0,然后将余数从下往上排列,得到的就是对应的十六进制数。注意,余数大于9时,要用A - F 表示。
案例2:十进制转十六进制
十进制数:846
计算过程:
846 ÷ 16 = 52 余 14 (E) ↑
52 ÷ 16 = 3 余 4 ↑
3 ÷ 16 = 0 余 3 ↑
读取余数:34E验证:
printf("%X\n", 846); // 输出34E
二进制 ↔ 十六进制转换
二进制转十六进制
二进制转十六进制可以将二进制数从右至左每4位分为一组,不足4位的在左边补0,然后将每组4位二进制数转换为对应的十六进制数字。
案例1:二进制转十六进制
二进制数:1011 1100 0110 1111
分组处理:
1011 → B
1100 → C
0110 → 6
1111 → F
结果:0xBC6F验证代码:
printf("%X\n", 0b1011110001101111); // 输出BC6F
十六进制转二进制
十六进制转二进制则是将十六进制的每一位转换为对应的4位二进制数。
案例2:十六进制转二进制
十六进制数:0xA2D7
逐位转换:
A → 1010
2 → 0010
D → 1101
7 → 0111
结果:1010001011010111验证:
print_binary(0xA2D7); // 输出1010001011010111
三、计算机数值表示深度解析
计算机底层存储数据时使用的是二进制数字,但是计算机在存储一个数字时并不是直接存储该数字对应的二进制数字,而是存储该数字对应二进制数字的补码。
1. 机器数和真值
机器数
一个数在计算机的存储形式是二进制数,我们称这些二进制数为机器数。机器数可以是有符号的,用机器数的最高位存放符号位,0表示正数,1表示负数。
真值
因为机器数带有符号位,所以机器数的形式值不等于其真实表示的值(真值),以机器数10000001为例,其真正表示的值(首位为符号位)为-1,而形式值(首位就是代表1)为129;因此将带符号的机器数的真正表示的值称为机器数的真值。
2. 原码、反码、补码的系统对比
表示法 | 正数表示 | 负数表示规则 | 零的表示 | 优缺点 |
---|---|---|---|---|
原码 | 直接二进制 | 符号位1+绝对值 | +0和-0两种表示 | 直观但运算复杂 |
反码 | 同原码 | 符号位不变,其余取反 | +0和-0两种表示 | 简化了部分运算但仍不完美 |
补码 | 同原码 | 反码+1 | 唯一表示 | 运算统一,硬件实现简单 |
3. 原码/反码/补码详解示例
原码表示案例(8位)
原码是一种简单的数值表示方法,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。
+18 的原码:00010010
-18 的原码:10010010(最高位为符号位)问题:原码中存在+0(00000000)和-0(10000000)两种表示
反码表示案例
正数的反码与原码相同,负数的反码是在原码的基础上,符号位不变,其余位取反。
+25 的反码:00011001(同原码)
-25 的反码:
1. 原码:10011001
2. 符号位不变:10011001
3. 数值位取反:11100110验证:
printf("%d\n", ~25 + 1); // 输出-25
补码表示案例
正数的补码与原码相同,负数的补码是在反码的基础上加 1。
-37 的补码计算:
1. 原码:10100101
2. 反码:11011010
3. 补码(反码+1):11011011快捷计算法:
37的二进制:00100101
取反:11011010
加1:11011011验证代码:
int8_t x = -37;
print_binary(x); // 输出11011011(实际显示32位,低8位匹配)
4. 补码的工程意义
硬件简化
- 加法器可同时处理加减法
- 无需额外的减法电路
- 溢出检测机制统一
数值范围优化
- 8位补码范围:-128~127
- 相比原码的-127~127,多表示一个数
实际案例分析
int8_t a = 127; // 01111111
int8_t b = 1; // 00000001
int8_t c = a + b; // 10000000 (-128,溢出)// 检测补码加法溢出
bool is_overflow(int8_t a, int8_t b) {return ((a ^ b) & 0x80) == 0 && ((a ^ (a + b)) & 0x80);
}
四、实战应用与性能优化
1. 位字段与硬件交互
// 寄存器位字段定义
typedef struct {uint32_t enable : 1; // 位0uint32_t mode : 3; // 位1-3uint32_t reserved : 24; // 位4-27uint32_t ready : 1; // 位28uint32_t error : 3; // 位29-31
} DeviceReg;// 使用示例
volatile DeviceReg* reg = (DeviceReg*)0xFFFF0000;
reg->enable = 1;
reg->mode = 0b101; // 二进制直接赋值
2. 高效位操作技巧
-
位掩码应用:
#define BIT(n) (1u << (n))// 设置位 uint32_t set_bit(uint32_t val, int n) {return val | BIT(n); }// 清除位 uint32_t clear_bit(uint32_t val, int n) {return val & ~BIT(n); }// 切换位 uint32_t toggle_bit(uint32_t val, int n) {return val ^ BIT(n); }
-
位计数优化:
// 高效计算1的个数(汉明重量) int popcount(uint32_t x) {x = x - ((x >> 1) & 0x55555555);x = (x & 0x33333333) + ((x >> 2) & 0x33333333);return ((x + (x >> 4) & 0x0F0F0F0F) * 0x01010101 >> 24; }
五、常见陷阱与最佳实践
1. 典型错误案例
-
符号扩展问题:
uint8_t port = 0x81; int16_t value = port; // 错误:预期是129,实际可能被解释为-127
-
位移未定义行为:
int32_t x = -1; x = x >> 1; // 实现定义行为,不同编译器结果可能不同
2. 防御性编程建议
-
显式类型转换:
uint8_t a = 200; int8_t b = (int8_t)a; // 明确知道会发生截断
-
使用标准整数类型:
#include <stdint.h>int8_t signed_byte; uint32_t unsigned_word;
-
边界检查宏:
#define CHECK_BIT(n) ((n) >= 0 && (n) < sizeof(type)*8)
六、扩展知识与应用前沿
1. 浮点数的二进制表示
IEEE 754标准浮点数的内存布局:
typedef union {float f;struct {uint32_t mantissa : 23;uint32_t exponent : 8;uint32_t sign : 1;} parts;
} FloatRep;// 分析浮点数结构
FloatRep num;
num.f = -3.14f;
printf("Sign: %X, Exponent: %X, Mantissa: %X\n", num.parts.sign, num.parts.exponent, num.parts.mantissa);
2. 现代处理器的二进制优化
-
SIMD指令集:
// 使用SSE指令进行并行位操作 #include <emmintrin.h>__m128i a = _mm_set_epi32(0x1234, 0x5678, 0x9ABC, 0xDEF0); __m128i b = _mm_slli_epi32(a, 4); // 每个元素左移4位
-
位操作指令优化:
- POPCNT:硬件计算1的个数
- BSR/BSF:查找设置位
总结与展望
深入理解二进制系统为C程序员带来了显著优势:
- 调试能力提升:能够直接分析内存dump数据
- 性能优化:合理使用位操作代替算术运算
- 硬件交互:精确控制设备寄存器
- 跨平台开发:理解不同架构的数据表示差异
随着计算机体系结构的发展,二进制知识也在不断演进。量子计算中的量子位(Qubit)、神经形态计算中的脉冲编码等新技术正在扩展二进制的概念边界。作为C语言开发者,保持对这些前沿技术的关注将有助于我们在未来的计算范式中保持竞争力。
您在实际项目中遇到过哪些有趣的二进制应用案例?或者有哪些关于位操作的独特经验?欢迎在评论区分享您的见解!
相关文章:
深入探究C语言中的二进制世界:从原理到实践
文章目录 深入探究C语言中的二进制世界:从原理到实践一、进制的本质与C语言实现1. 进制系统全景2. C语言中的进制表示3. 格式化输出进阶 二、进制转换的工程实践1. 转换算法实现2. 实际应用中的转换技巧快速二进制 - 十六进制转换位运算优化转换 3. 进制转换详细示例…...
【android bluetooth 协议分析 13】【RFCOMM详解 2】【通俗易懂 rfcomm 基本流程】
RFCOMM 协议 基本流程 一、连接建立流程(附 BTsnoop 实例解析) 1. L2CAP 通道建立 BTsnoop 表现: L2CAP_Connection_Request (PSM0x0003) // 请求建立RFCOMM专用通道L2CAP_Connection_Response (Success) // 对方同意作用:相…...
万字知识篇(2):SpringBoot的常用注解(上)
SpringBoot的常用注解非常的多,一篇文章根本讲不完,将分为上下两章,通过本章你将会系统的学习到: 1. 注解在SpringBoot中的作用 2. SpringBoot 常用注解速查表 3. 核心启动类注解 4. Configuration 5. Bean 6. PropertySource 7. …...
Postman —— postman实现参数化
什么时候会用到参数化 比如:一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块:正确的用户名,密码 成功;错误的用户名,正确的密码 失败 postman实现参数化 在实际的接口测试中,部分参数每…...
Docker学习--容器生命周期管理相关命令--docker create 命令
docker create 命令作用: 会根据指定的镜像和参数创建一个容器实例,但容器只会在创建时进行初始化,并不会执行任何进程。 语法: docker create[参数] IMAGE(要执行的镜像) [COMMAND](在容器内部…...
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
算法基础_基础算法【高精度 前缀和 差分 双指针】 ---------------高精度---------------791.高精度加法题目介绍方法一:代码片段解释片段一: 解题思路分析 792. 高精度减法题目介绍方法一:代码片段解释片段一: 解题思路分析 7…...
C语言深度解析:从零到系统级开发的完整指南
一、C语言的核心特性与优势 1. 高效性与直接硬件控制 C语言通过编译为机器码的特性,成为系统级开发的首选语言。例如,Linux内核通过C语言直接操作内存和硬件寄存器,实现高效进程调度。 关键点: malloc/free直接管理内存&#…...
Axure疑难杂症:完美解决中继器筛选问题(时间条件筛选、任性筛选)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器筛选专题 主要内容:时间条件筛选、多条件组合筛选、多个单一条件混合筛选 应用场景:各类数据表的多条件筛选均可使用…...
汇编学习之《扩展指令指针寄存器》
什么是指令指针寄存器? EIP (Extended Instruction Pointer): 保存cpu 下一次将要执行的代码的地址。 通过OllyGbd可以看到CPU即将执行指令的地址和EIP 内部放入的地址一致,多次F8依然是这样。 这里要区分下,之前比如EAX,ECX我…...
oracle-blob导出,在ob导入失败
导出: [oraclelncs dmp]$ /home/oracle/sqluldr2 gistar/res#pwd192.168.205.58:1521/lndb query"select * from an_odn_picture where length(PIC_CONTENT)<25000" filean_odn_picture.csv Charsetutf8 textCSV 0 rows exported at 2025-…...
【Linux笔记】进程间通信——匿名管道||进程池
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux笔记】动态库与静态库的理解与加载 🔖流水不争,争的是滔滔不 一、Linux进程间通…...
Spring Boot 3.4.3 基于 Caffeine 实现本地缓存
在现代企业级应用中,缓存是提升系统性能和响应速度的关键技术。通过减少数据库查询或复杂计算的频率,缓存可以显著优化用户体验。Spring Boot 3.4.3 提供了强大的缓存抽象支持,而 Caffeine 作为一款高性能的本地缓存库,因其优异的…...
windows使用nvm管理node版本
1.下载地址:https://github.com/coreybutler/nvm-windows/releases 选择nvm-setup.exe 2.安装,下载完成后,以管理员身份运行 nvm-setup.exe,选择默认安装,一路next 3.使用,安装完成后会打开一个命令行窗口࿰…...
vscode集成deepseek实现辅助编程(银河麒麟系统)【详细自用版】
针对开发者用户,可在Visual Studio Code中接入DeepSeek,实现辅助编程。 可参考我往期文章在银河麒麟系统环境下部署DeepSeek:基于银河麒麟桌面&&服务器操作系统的 DeepSeek本地化部署方法【详细自用版】 一、前期准备 (…...
智谱大模型(ChatGLM3)PyCharm的调试指南
前言 最近在看一本《ChatGLM3大模型本地化部署、应用开发和微调》,本文就是讨论ChatGLM3在本地的初步布设。(模型文件来自魔塔社区) 1、建立Pycharm工程 采用的Python版本为3.11 2、安装对应的包 2.1、安装modelscope包 pip install model…...
MySQL GROUP BY分组获取非聚合列值方法
在使用MySQL进行数据库查询时,如果你需要对数据按照某个或某些列进行分组(GROUP BY),并且希望在结果中包含非聚合列的值,你可以通过以下几种方法来实现: 1. 使用聚合函数 虽然这不是直接获取非聚合列值的…...
多路径 TCP 调度的另一面
参考前面的文章 一个原教旨的多路径 TCP 和 MP-BBR 公平性推演,一直都破而不立,不能光说怎样不好,还得说说现状情况下,该如何是好。 如果 receiver 乱序重排的能力有限(拜 TCP 所赐),如果非要在多路径上传输 TCP&…...
在Qt中判断输入的js脚本是否只包含函数
目前在使用QtScriptEngine,在利用evaluate注册子函数时,要求用户输入的js文件中的内容仅仅是函数,函数体外不能出现一些变量的声明、函数的调用等其他代码。 反复咨询DeepSeek后,终于给出了一个目前测试可用的代码: b…...
【Easylive】MySQL中LEFT JOIN与INNER JOIN的使用场景对比
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 在MySQL数据库查询中,JOIN操作是最常用的操作之一,而LEFT JOIN和INNER JOIN是两种最基础的JOIN类型。理解它们的区别和适用场景对于编写高效、准确的SQL查询至关重要…...
Boost库中的谓词函数
Boost库中的谓词函数 谓词函数基础概念 在编程中,谓词函数(Predicate Function)是指返回布尔值(true或false)的函数,用于检测输入是否满足特定条件。谓词函数在STL算法和Boost库中被广泛使用,…...
人工智能之数学基础:基于初等反射矩阵完成矩阵的QR分解
本文重点 QR分解是矩阵分解中的一种重要方法,它将一个矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=QR。这种分解在求解线性方程组、最小二乘问题、特征值计算等领域有着广泛应用。 QR分解的定义 QR分解就是应用了初等反射矩阵,不断的通过初等反射矩阵,然后将A变…...
AI应用案例(1)——智能工牌和会话质检
今天开辟一个新的模块,自己平时也搜集一些典型的行业应用案例,不如就记录到C站,同时和大家也是个分享好了。 今天分享的企业和产品,是循环智能的智能工牌。 这个产品应用场景清晰,针对的行业痛点合理,解决…...
碰一碰发视频系统--基于H5场景开发
碰一碰发视频#碰一碰发视频#开发基于H5的"碰一碰发视频"交互系统(类似华为/苹果的NFC碰传但通过移动端网页实现),需要结合近场通信(NFC/H5 API)和媒体传输技术。以下是具体实现方案 #碰一碰营销系统# #碰一…...
kotlin扩展函数的实现原理
1. 编译时转换 在编译时,Kotlin 扩展函数会被转换为静态函数。这个静态函数的第一个参数是接收者类型(也就是被扩展的类),而调用扩展函数时,实际上是调用这个静态函数,并将接收者对象作为第一个参数传入。…...
激活函数学习笔记
Sigmoid:梯度消失、指数计算复杂运行慢、输出不是以0为中心,梯度平滑便于求导tanh:以0为中心,其他与sigmoid相似ReLu:transformer常用,解决了梯度消失问题、计算复杂度低,存在神经元死亡问题和梯…...
【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现
项目介绍 本课程演示的是一款基于Python爬虫二手房价格预测与可视化系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项…...
基于 Swoole 的高性能 RPC 解决方案
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
# 实时人脸识别系统:基于 OpenCV 和 Python 的实现
实时人脸识别系统:基于 OpenCV 和 Python 的实现 在当今数字化时代,人脸识别技术已经广泛应用于各种场景,从手机解锁到安防监控,再到智能门禁系统。今天,我将通过一个完整的代码示例,详细讲解如何使用 Pyt…...
python的global在编译层面的进阶理解
目录 报错情况 编译执行过程 (1)源代码(.py 文件) (2)编译阶段:解析 & 生成字节码 (3)解释执行:Python 虚拟机(PVM) 字节码…...
OpenCV、YOLO与大模型的区别与关系
OpenCV、YOLO 和大模型的区别与关系 1. OpenCV(Open Source Computer Vision Library) 定位:开源的计算机视觉基础库。功能:提供传统的图像处理算法(如图像滤波、边缘检测、特征提取)和基础工具ÿ…...
Buzz1.2.0视频语音转成TXT、SRT、VTT工具
buzz0.9.0.exe下载 https://download.csdn.net/download/u011000529/90551347 特征 导入音频和视频文件并导出文本到 TXT、SRT 和 VTT从您计算机的麦克风转录和翻译成文本(资源密集型且可能不是实时的,Demo)支持Whisper、 Whisper.cpp、Fast…...
Vue 2 和 Vue 3 中的钩子函数
Vue 钩子函数也被叫做生命周期钩子函数,它是 Vue 实例在其生命周期的不同阶段自动调用的函数。可以利用这些钩子函数在特定阶段执行自定义代码。 Vue 2 生命周期钩子函数 在 Vue 2 里,生命周期钩子函数可以在组件选项对象中定义。下面是一个简单的 Vue…...
零基础如何学会Appium自动化测试?
前言 appium是一款移动自动化测试工具,经常被用于实现UI自动化测试,其可支持安卓和IOS两大平台,还支持多种编程,因而得到了广泛的应用。此处便是立足于安卓平台,借助appium工具,使用python语言实现简单的自…...
用Python实现TCP代理
依旧是Python黑帽子这本书 先附上代码,我在原书代码上加了注释,更好理解 import sys import socket import threading#生成可打印字符映射 HEX_FILTER.join([(len(repr(chr(i)))3) and chr(i) or . for i in range(256)])#接收bytes或string类型的输入…...
SQL复杂查询与性能优化:医药行业ERP系统实战指南
SQL复杂查询与性能优化:医药行业ERP系统实战指南 一、医药行业数据库特性分析 在医药ERP系统中,数据库通常包含以下核心表结构: -- 药品主数据 CREATE TABLE drug_master (drug_id INT PRIMARY KEY,drug_name VARCHAR(255),specification …...
问题大集10-git使用commit提交中文显示乱码
(1)问题 (2)解决步骤 1) 设置全局编码为 UTF-8 git config --global core.quotepath false git config --global i18n.commitEncoding utf-8 git config --global i18n.logOutputEncoding utf-8 2) 显示或设…...
vue前端项目技术架构(第二版)
vue技术架构介绍 如下图所示,展示了项目系统的软件层次架构。该系统采用基于SOA(面向服务架构)思想的分层架构,分为四个主要层次:视图层、编译层、代码层和数据层。 视图层 浏览器:核心职责是解析并展示…...
Java 开发中的 AI 黑科技:如何用 AI 工具自动生成 Spring Boot 项目脚手架?
在 Java 开发领域,搭建 Spring Boot 项目脚手架是一项耗时且繁琐的工作。传统方式下,开发者需要手动配置各种依赖、编写基础代码,过程中稍有疏忽就可能导致配置错误,影响开发进度。如今,随着 AI 技术的迅猛发展&#x…...
计算机网络知识点汇总与复习——(一)计算机网络体系结构
Preface 计算机网络是考研408基础综合中的一门课程,它的重要性不言而喻。然而,计算机网络的知识体系庞大且复杂,各类概念、协议和技术相互关联,让人在学习时容易迷失方向。在进行复习时,面对庞杂的的知识点,…...
Copilot完全指南:AI编程助手的革命性实践
一、智能编程新时代:从代码补全到AI结对编程 1.1 Copilot的进化历程 2021年GitHub Copilot的诞生标志着编程辅助工具进入新纪元。与传统IDE补全工具相比,Copilot展现出三大革命性特征: 语义理解:基于GPT模型理解代码上下文跨文…...
Redis 梳理汇总目录
Redis 哨兵集群(Sentinel)与 Cluster 集群对比-CSDN博客 如何快速将大规模数据保存到Redis集群-CSDN博客 Redis的一些高级指令-CSDN博客 Redis 篇-CSDN博客...
5、无线通信基站的FPGA实现架构
基站(Base Station,BS),也称为公用移动通信基站,是无线电台站的一种形式,具体则指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间的信息传递的无线电收发信电台。…...
MySQL - 索引原理与优化:深入解析B+Tree与高效查询策略
文章目录 引言一、BTree索引核心原理1.1 索引数据结构演化1.2 BTree的存储结构通过主键查询(主键索引)商品数据的过程通过非主键(辅助索引)查询商品数据的过程 MySQL InnoDB 的索引原理 二、执行计划深度解析三、索引失效的六大陷…...
2025年数智化电商产业带发展研究报告260+份汇总解读|附PDF下载
原文链接:https://tecdat.cn/?p41286 在数字技术与实体经济深度融合的当下,数智化产业带正成为经济发展的关键引擎。 从云南鲜花产业带的直播热销到深圳3C数码的智能转型,数智化正重塑产业格局。2023年数字经济规模突破53.9万亿元ÿ…...
html实现手势密码
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>手势密码</title><style>body {font-fam…...
机器学习(八):K-Means聚类原理与实战
声明:未经允许禁止转载与抄袭。 前言 k k k均值( k k k-means)聚类算法是一种经典的无监督聚类算法,本文将深入解析其理论原理,并在真是数据集上进行算法实践,话不多说,请看下文。 算法原理 …...
从 Word 到 HTML:使用 Aspose.Words 轻松实现 Word 文档的高保真转换
从 Word 到 HTML:使用 Aspose.Words 轻松实现 Word 文档的高保真转换 前言一、环境准备二、核心代码实现1. 将 Word 转换为 HTML 文件流2. 优化超链接样式 三、测试效果四、总结 前言 在日常开发中,我们经常需要将 Word 文档转换为 HTML,用于…...
SQLMesh调度系统深度解析:内置调度与Airflow集成实践
本文系统解析SQLMesh的两种核心调度方案:内置调度器与Apache Airflow集成。通过对比两者的适用场景、架构设计和操作流程,为企业构建可靠的数据分析流水线提供技术参考。重点内容包括: 内置调度器的轻量级部署与性能优化策略Airflow集成的端到…...
【深度学习新浪潮】Grok过去两周的进展一览(2025.04.01)
1. Grok过去两周的进展一览 根据公开信息,Grok在过去两周的主要进展如下: Grok 3正式上线并开放 xAI于2025年3月30日宣布Grok 3正式向所有Premium+订阅用户开放,并同步将X平台的Premium+订阅费用上涨至月费近50美元、年费350美元。这是继Grok 2之后的重大升级,其推理能力和…...
Vue表单数据回显失败技术解析与修复指南!!!
Vue表单数据回显失败技术解析与修复指南 🚀 在Vue.js应用开发中,「父子组件通信」「动态弹窗」是经典功能组合。但当遇到关键场景表单数据无法回显时,你是否也在深夜加班改bug?本文通过完整案例分析,揭秘该问题背后深层…...