- 博客(34)
- 收藏
- 关注
转载 C语言标准CRC-32校验函数
C语言标准CRC-32校验函数CRC-32校验产生4个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。获得的校验码是随数据绑定获得。。这里介绍CRC-32的64位计算方式和简化的32位计算方式。设计原理设计原理仍然基于无符号64位整型为一个计算单元,当超过64位时,将前一个单元的计算余数,与后面的输入数据重新组成64位数据,再进行模二除法,以此类推,得到最后的CRC-32校验值(余数)。设计按照CRC计算基本原理来实现,以契合理解对照。
2024-12-12 10:00:57
617
转载 RTL9000BRG调试总结
RTL9000是百兆,调试的板子是使用的RGMII。调试一款phy芯片最简单直接的方式是查看内核中是否支持这类型号。查看代码中只是支持了8211系列。所以需要自己适配RTL9000。
2023-10-31 09:42:25
1719
转载 selinux
当发现一个服务出现错误的时候,请先检查一下 sealert 的分析报告里面是否有该服务进程名称的关键字。设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。
2023-03-06 16:15:12
563
原创 从远程桌面连接切换回主屏幕的快捷键
环境是在 windows 使用远程桌面连接之后(远程桌面处于全屏的状态下),如何使用快捷键 Alt + Tab 键返回主机。按下 Ctrl + Alt + Home 键即可使用快捷键 Alt + Tab 键返回主机。这样大部分的键盘快捷键都是主机的,远程桌面只能使用鼠标了。
2022-12-13 10:09:30
12813
1
转载 以太网PHY寄存器分析
目录1、以太网PHY标准寄存器分析1.1 Control Register1.2 Status register1.3 PHY Identifier Register1.4 Auto-Negotiation Advertisement Register1.5 Auto-Negotiation Link Partner Base Page Ability Register1.6 Auto-Negotiation Expansion Register1.7 AN next page Register/AN Li
2022-12-12 10:37:41
4624
1
原创 i2ctransfer 用法
i2ctransfer 的参数可以在网上很轻易的搜到,所以这里就不赘述了,这里主要讲一下平时使用的方法i2ctransfer -f -y 0 w3@0x32 0x43 0x24 0x180:代表 IIC 的总线号w:代表写3:代表写 3 Byte0x32:代表 IIC 设备地址后边三个数据代表要写的数据i2ctransfer -f -y 0 w1@0x3A 0x08 r3这句代表的意思是从0x3A地址上偏移0x08之后读取3个Bytei2ctransfer -f -y 0 w16@0x54 0x48 0xf
2022-12-07 14:30:59
14641
转载 Linux下minicom操作
版权声明:本文为优快云博主「宁静致远2021」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/m0_46577050/article/details/122825130。(2)W键:自动卷屏。在使用终端输入 minicom 进入传输时,是无法直接退出的,需要使用以下方法退出。(5)X键:退出mInicom,会提示确认退出。(4)B键:浏览minicom的历史显示;(3)C键:清除屏幕的显示内容;2)按z进入设置菜单。
2022-10-19 10:10:31
310
原创 C语言结构体中二级指针转换为普通变量
就是将指针指向的变量或结构体赋值给一个普通变量就OK了,但是,仅限于二级指针指向变量或结构体的普通变量,如果指向其他的就另当别论了。有一种情况,我不想使用指针了,怎么才能把q给替换掉,且不会改变他原本的意义?如下代码,t可以完美代替**q,所以有些场景不想用指针了就可以使用这个办法。假如说有一个类似这样的结构体。
2022-10-11 17:47:03
1082
原创 C/C++内存管理方式
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量 (这里注意一个问题:一般的书上都会说全局变量和静态变量是会自动初始化的,那么哪来的未初始化的变量呢?变量的初始化可以分为显示初始化和隐式初始化,全局变量和静态变量如果程序员自己不初始化的话的确也会被初始化,那就是不管什么类型都初始化为0,这种没有显示初始化的就是我们这里所说的未初始化。既然都是0那么就没必要把每个0都存储起来,从而节省磁盘空间,这是BSS的主要作用)的一块内存区域。BSS是英文Block Star
2022-05-07 10:40:36
162
原创 C语言快速排序(QUICK-SORT)
平均时间复杂度:O(n*logn)最坏时间复杂度:O(n2)空间复杂度: O(logn)数据元素稳定性:不稳定#include<stdio.h>int quick_sort(int *a,int low,int high){ if(low < high){ //当两个下标不重合的时候开始排序 int i = low; //把low 和 high 先存起来 int j = high; int k = a[low]; //把最左...
2022-03-23 12:58:46
1550
原创 插入排序
平均时间复杂度: O(n2)最坏时间复杂度: O(n2)空间复杂度: O(1)数据对象稳定性: 稳定#include<stdio.h>int insertion_sort(int *a,int lenth){ int i,j,temp = 0; for(i = 1;i < lenth;i++){ temp = a[i]; for(j = i-1;j >=0 && a[j] > temp;j--){ a[j+1] = a[j
2022-03-19 16:38:57
534
原创 选择排序
平均时间复杂度: O(n2)最坏时间复杂度: O(n2)空间复杂度: O(1)数据对象稳定性: 数组不稳定,链表稳定#include<stdio.h>void selection_sort(int *a,int len){ int t,k = 0; for(int i = 0;i < len-1;i++){ k = i; //找个变量去记录最大元素下标-----第9行 for(int j = i+1;j
2022-03-19 15:46:46
64
原创 冒泡排序(优化)
平均时间复杂度: O(n2)最坏时间复杂度: O(n2)空间复杂度: O(1) 数据对象稳定性: 稳定#include<stdio.h>int main(int argc, const char *argv[]){ int a[6] = {1,34,23,45,2,7}; int i = 0; int j = 0; int t = 0; int flag = 0; for (i = 0;i < 6-1;i++){ flag ...
2022-03-19 15:23:27
136
原创 enum 和 union
目录enum:基本类型union:构造类型enum:基本类型定义枚举:enum 枚举类型名(不能省略){成员1,成员2,.......};typedef enum 枚举类型名(可以省略){成员1,成员2,.......}新的枚举类型别名;定义枚举:enum {成员1,成员2,.......}变量名;//定义的同时定义了一个变量,这种用法只能定义一个变量,就是次变量枚举成员都是一个常量,...
2022-03-10 19:22:49
827
原创 typedef 类型
使用typedef时,把定义的名字去掉就是数据类型结尾要加分号typedef起别名参与的是编译的过程typedef 起别名时相当于给数据类型换个名字 但是定义好的别名是另一个新的数据类型比如:typedef int * point_tpoint_t p,q;此时p和q都是一个指针point 就是一个新的数据类型,类似于int p,q; p和q都是int类型,而不是简单的替换附上代码:#include<stdio.h>typedef int ___i.
2022-03-10 18:46:03
435
原创 C语言 存储类型
auto:自动类型全局变量不能用auto修饰,一般不写,省略就是autoregister:寄存器类型1.一般不用寄存器类的变量,因为寄存器变量有限,普通的寄存器是16个,每个4字节2.寄存器没有地址,一般通过编号访问(R0-R15)static:静态类型1.寄存器修饰局部变量时会延长变量的生命周期,且只在第一次执行时进行定义2.如果static修饰的变量没有初始化,则在.bss段,初始值为03.如果static修饰的变量初始化,则在.data段4.static修饰的全局变
2022-03-10 18:33:21
898
原创 Shell编程 算数和字符串运算(Ubuntu)
前序:shell中的输入和输出1.输入read varread var1 var2 两个值之间用空格或者tab键 不能用回车read -p "提示字符串" varread -t 秒 var 多少秒后如果没有输入就结束read -n num var 输入num个字符后结束输入read -s var 输入的内容不回显 类似于输入密码2.输出 -----> echo1.sh...
2022-03-08 21:05:49
1718
原创 Shell编程 数组(Ubuntu)
1.shell中只支持一维数组2.定义数组并初始化方式1:数组名=(成员1 成员2 成员n)数组名=([0]=成员1 [1]=成员2 [5]=成员5)部分初始化 (写几个成员该数组就有几个成员,跟数字不掺和)3.对数组的某个成员赋值数组名[下标]=值4.访问数组成员${数组名[下标]} 访问某个成员${数组名[*]} 或 ${数组名[@]} 访问数组所有成员5.数组成员统计${#数组名[*]} 或 ...
2022-03-08 20:19:57
1880
1
原创 Shell编程 ----- shell变量(Ubuntu)
1.shell变量定义及使用1>shell定义变量时,没有数据类型,都当成一个字符串来处理。不需要指定数据类型格式:变量名=初始化2>变量定义规则和C语言类似3>定义变量时,等号两边不允许有空格4>定义变量时,初始化字符串中如有空格,必须用""或者''括起来str="hello world" str='hello world'5>如果在字符串中引用变量的值,必须用""括起来str...
2022-03-08 19:43:53
2284
原创 Shell编程 ----- read 和 echo 换行
read -p $'What\'s your name?\n' name必须用单引号,前面加$符号echo $'hello world\n>'同read
2022-03-07 16:45:45
807
原创 Linux磁盘命令
查看U盘是否连接:ll /dev/sd* dev下为设备文件,sd[a-z][1-9]是块设备文件名字brw-rw---- 1 root disk 8, 0 3月 1 16:47 /dev/sdabrw-rw---- 1 root disk 8, 1 3月 1 16:47 /dev/sda1---------------> Ubuntu对应的磁盘设备文件brw-rw---- 1 root disk 8, 1 3月 1 16:47...
2022-03-06 17:21:59
369
原创 Linux常用命令(Ubuntu)
1.1 Linux系统软件包的后缀Ubuntu -----> .debredhat ------> .rpm1.2 软件包命名规则sl _3.03 -17build2 _amd64 .deb | | | | | 软件名 主版本号 修订版本号 架构 后缀 (x86 --> 32位架构-->
2022-03-06 17:06:41
2422
原创 C语言指针函数和函数指针
1.指针函数本质上是一个函数,返回值是一个指针类型#include <stdio.h>int *my_add(int a, int b){ int temp = a+b; printf("func:&temp = %p\n", &temp); return &temp;//不能返回局部变量的地址 //因为局部变量的生命周期在函数结束时就结束了 //所占用的空间会被操作系统回收 //回收后再访问 就是非法访问了 段错误}
2022-03-06 13:13:49
270
原创 C语言 const关键字
const关键字的作用是修饰 只读#include <stdio.h>int main(int argc, const char *argv[]){ //const用来修饰普通变量 int a = 10; a = 20;//正确的 const int b = 10; printf("b = %d\n", b);//读 是允许的 //b = 20;//错误的 //const 用来修饰指针,有下面四种写法 //const int *p; //int const
2022-03-06 13:03:11
215
原创 C语言数组指针和指针数组
1.数组指针本质上是一个指针,指向一个二维数组。数组指针也叫作行指针,每次操作的空间是一行。#include <stdio.h>int main(int argc, const char *argv[]){ int s[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; /* int *p = s; printf("%d\n", *(p+1));//2 */ //如果想用指针指向二...
2022-03-06 12:59:26
421
原创 主机大小端存储问题
小端存储:地址低位存储数据低位,地址高位存储数据高位。int a = 0x1234567812 34 56 78地址: 0x63 0x62 0x61 0x60大端存储: 地址低位存储数据高位,地址高位存储数据低位。int a = 0x12345678...
2022-03-06 12:23:37
150
原创 C语言冒泡优化排序(函数)
#include<stdio.h>void my_mpsort(int *p,int n){ int i,j,flag,temp = 0; for(i = 0;i < n-1;i++){ flag = 0; for(j = 0;j < n-1-i;j++){ if(p[j] > p[j+1]){ temp = p[j]; p[j] = p[j+1]; p[j+1] = temp; flag = 1; } } .
2022-03-06 12:09:30
194
原创 二维数组
用Python创建一个二维数组表:goods = []for i in range(3): # 三行 goods.append([int(i) for i in input().split()]) # 列自己控制,每列之间用空格空开print(goods)运行截图 (三行三列)
2021-05-07 18:49:50
59
转载 map函数
map函数map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。我们可以用它来获取多个输入,且可以转换类型例如:a,b=map(int,input("请输入2个数字(用空格隔开)").split())得到四个int型的值。map函数在这里的作用就是将多个输入值批量转换成int。(只能进行多个值的转换)————————————————版权声明:本文为优快云.
2021-05-07 18:27:52
2801
原创 动态规划 求数组中不相邻元素的最大和
有一个数组:arr = [1, 2, 4, 1, 7, 8, 3]找出相加最大的和,选择的数不能相邻该数组解为 1,4,7,3 和为15题解:b站视频讲解https://www.bilibili.com/video/BV12W411v7rd?from=search&seid=16185215057279292603从最后一个来是按照递归的思想,动态规划的思想是从数组的第三个元素开始,选或不选,然后求最大值,将值赋给opt数组,如此循环直到arr数组的最后一个,结束,返回op.
2021-05-06 22:15:44
1403
原创 异或解码
未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。示例 1:输入:encoded = [1,2,3].
2021-05-06 12:49:48
483
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人