5、C语言——前言(基础知识)

article/2025/8/14 1:15:35

1、计算机的数据存储

计算机中的数据存储分为两大块:数值型数据和非数据型数据的存储

1.1、数值型数据的表示方法:

主要分为:二进制数据、十进制数据、八进制数据、十六进制数据。四种类型可以相互转化

1.1.1、二进制数据:

由0、1组成,01010101,是计算机可以识别的语言,机器语言,可以由0b来进行标识。
二进制转十进制: 最低为乘以10的0次,次低位乘以10的一次,依次递增
二进制转八进制: 每三位转化为一位八进制数,最高位不足补零
例如: 1001101 0115
二进制转十六进制: 每四位转化一位十六进制数,最高位不足补零
例如: 100101110 0x12e

1.1.2、十进制数据:

由0-9组成,是人类能看懂的语言
十进制转二进制: 直接对二取余,直到商为0,然后每个余数倒着读
十进制转8进制: 直接对8取余,直到商为0,然后每个余数倒着读(与二进制方式一样)
十进制转16进制: 直接对16取余,直到商为0,然后每个余数倒着读,9以上的从a一次加

1.1.3、八进制数据:

由0-7组成,一般八进前需要加前导符0来标识
例如0122
八进制转十进制: 最低为乘以8的0次,次低位乘以8的一次,依次递增
八进制转二进制: 八进制数据的每一位可以由三位二进制数来表示
例如 0122 000001010010

1.1.4、十六进制数据

由1-9 a-f组成。一般十六进制需要0x作为前导符来标识
例如0xa1

十六进制转十进制: 最低为乘以16的0次,次低位乘以16的一次,依次递增
十六进制数转二进制: 十六进制数的每一位可以由四位二进制数来表示
例如: 0xa1 000010100001

1.1.5、注意

无论是什么类型的数据,计算机最终都会转化为计算机可以识别的二进制数据

1.1.6、C语言中数值型数据的表示方法

二进制:由01组成的数据1000110111十进制:由0-9组成的数据,这也是人类能够直接识别的39二进制转十进制:10110 -> 0*2^0+1*2^1+1*2^2+0*2^3+1*2^4=22十进制转二进制:将十进制数每次除以2,然后保存商,然后继除以,知道商为0为止,饭后将余数倒过来就是二进制码八进制:由0-7组成的数据,一般八进制数用0开头标识0137八进制转十进制:0137 --> 7*8^0+3*8^1+1*8^2=47八进制转二进制:1位八进制数都要使用3位二进制标识0137 --> 001 011 111二进制转八进制:从右向左取三位二进制作为一位八进制即可101101101 --> 0555十六进制:由0-9、a-f表示数据 a 10 b 11 c 12 d 13 e 14 f 15十六进制一般以0x作为标识0x1af6十六进制转十进制:0x1af6 --> 6*16^0+15*16^1+10*16^2+1*16^3十六进制转二进制:1位十六进制数用4位二进制来标识0x1af6 --> 0001 1010 1111 0110二进制转十六进制:从右向左取四位二进制作为一位十六进制即可

1.1.7、C语言实例

#include <stdio.h>//注释的方法:
//第一种: //...  注释一行
//第二种: /* ... */  注释多行
//第三种:#if 0 ... #endif //数值型数据的表示方式int main()
{//int:整数数据类型,用于定义变量//a:变量名,用于保存数据的int a = 35;//输出十进制,通过%d输出printf("a = %d\n", a);//输出八进制,通过%o输出,#输出前导符printf("a = %#o\n", a);//输出十六进制,通过%x输出,#输出前导符printf("a = %#x\n", a);//定义一个变量保存八进制数int b = 0527;printf("b = %d %#o %#x\n", b, b, b);//定义一个变量保存十六进制数int c = 0xa76f;printf("c = %d %#o %#x\n", c, c, c);//可以定义一个二进制数,以0b作为前导符int d = 0b1000101;printf("d = %d\n", d);return 0;

执行结果
在这里插入图片描述

1.2、非数值型数据的表示方法:

非数值型数据也就是ascii码,只要是单引号或者是双引号里面出现的数据都是非数值型数据
计算机只能识别二进制也就是数值型数据,但是在编程中往往会出现一些非数值的数据,比如人名、性别等等,所以我们需要让计算机识别这些,所以就发明出来专门识别非数值型数据的东西,称之为ASCII码
注意: 如果一个双引号或者单引号里面出现了数字,都认为是非数值型数据
“hello w965orld” ‘7’

常用的字符

'\0'   -->   0 (一般在字符串的结尾)
'\n'   -->   10 (用作换行)
'0'-'9'  -->  48-57
'A'-'Z'  --> 65-90
'a'-'z' --> 97-122

2、C语言中的注释方法(C89)

第一种

//

第二种

/**/

第三种

#if 0#endif//如果要解除注释只需要将0换成1即可

3、关键字

(C语言严格区分大小写,关键字都是小写)
一共32种关键字:(c89有28个,C99有32个, C11有42个)
分别为(数据类型,存储类型,逻辑类型 ,其他
数据类型:

int char short long double float
signed  unsigned  enum  struct  union  void

存储类型:

const  static  volatile  extern  auto  register

逻辑类型:

if  else  for  do while switch 
case  break default continue goto return

其他:

sizeof  typedef

4、标识符

标识符是指代码中的变量、函数名、结构体名、宏定义名、取别名等等
命名规则:
1、不能与关键字同名
2、名字的第一个字符不可以是数字
3、只能由数字、字母、下划线 组成

5、数据类型

作用:可以确定数据在内存中开辟空间的大小
分为:基本数据类型、构造数据类型、指针类型、空类型

5.1 分类

基本数据类型:
逻辑类型
整数类型
浮点类型
void类型
构造数据类型:
数组
结构体
联合体(共用体)
枚举

5.2 基本数据类型

5.2.1 逻辑类型 – bool类型

true 真
false 假
注意:linux默认是没有bool类型的(实际使用可以使用_Bool申明或加头文件<stdbool.h>后使用bool数据类型),一般用0和1表示假和真,非0即为真
一般逻辑类型主要是在控制语句中使用

#include <stdio.h>//linux系统中默认没有bool类型
//但是可以使用_Bool,它定义的变量的值只有1和0
//非零即为真int main()
{_Bool a = 1;printf("a = %d\n", a);_Bool b = 0;printf("b = %d\n", b);_Bool c = 128;printf("c = %d\n", c);_Bool d = -0.0000005;printf("d = %d\n", d);return 0;

执行结果
在这里插入图片描述
如果想使用bool,必须添加头文件stdbool.h
在这里插入图片描述

5.2.2 整数类型

整数类型一般分为char、short、int、long
每一种整数类型又分为有符号(signed )和无符号(unsigned )
有符号就是有正数也有负数,无符号都是正数和0
注意一般定义变量是需要说明有无符号,如果不加,默认表示有符号的

5.2.2.1 char 字符类型

char类型定义的变量在内存中占1个字节,8位
char类型存储的数据范围:
无符号:0 ~ 255
有符号:-128 ~ 127
char类型用的最多的地方是用于保存字符(一个非数值型数据)
char ch = ‘a’;

5.2.2.2 short 短整型 (short int)

short类型定义的变量在内存中占2个字节
short类型存储的数据范围:
无符号:0 ~ 2^16-1
有符号:-2^15 ~ 2^15-1

5.2.2.3 int 整型

int类型定义的变量在内存中占4个字节
short类型存储的数据范围:
无符号:0 ~ 2^32-1
有符号:-2^31 ~ 2^31-1

5.2.2.3 long 长整型 (long int)

long类型定义的变量在64位操作系统中占8个字节,在32位操作系统中占4个字节
short类型存储的数据范围:
无符号:0 ~ 2^64-1
有符号:-2^63 ~ 2^63-1

5.2.3 浮点类型(后续补充浮点转二进制)

浮点型数据有两种:
单精度类型:float 占4个字节
双精度类型:double 占8个字节
精确到小数点后六位

5.2.4 void类型

void是一个空类型,默认不占字节数

5.3 数值型数据在计算机中的存储形式

数据在保存的时候涉及原码、反码和补码的转换问题
原码是人类识别的,补码是计算机识别的,反码用于原码和补码的转换

正数:原码、反码和补码是一样的
有符号数:由于有符号数有正有负,所以最高位为符号位,1表示负数,0表示正数
对于负数而言,反码就是原码取反,补码等于反码加1,注意符号位永远不变

方法:存储时看数据,取出时看类型

unsigned char a = 10; --> 1010
存储时:原码:0000 1010反码:0000 1010补码:0000 1010
取出时:补码:0000 1010反码:0000 1010原码:0000 1010 = 10signed char b = -10;  --> 1000 1010
存储时:原码:1000 1010反码:1111 0101补码:1111 0110
取出时:补码:1111 0110反码:1111 0101原码:1000 1010 = -10signed char c = 129;  ->1000 0001
存储时:原码:1000 0001反码:1000 0001补码:1000 0001
取出时:补码:1000 0001反码:1000 0000原码:1111 1111 = -127unsigned char d = -1; -> 1000 0001
存储时:原码:1000 0001反码:1111 1110补码:1111 1111
取出时:补码:1111 1111反码:1111 1111原码:1111 1111 = 255signed char c = 135; 
存储时:原码:1000 0111反码:1000 0111补码:1000 0111
取出时:补码:1000 0111反码:1000 0110

六、共享文件夹

6.1 共享文件夹的作用

就是实现Ubuntu系统和windows系统文件的传输

6.2 如何创建共享文件夹

点击菜单栏的“虚拟机”,点击“设置”,进入虚拟机设置窗口
然后点击当前窗口的左上角的“选项”,然后点击“共享文件夹”,在右边“文件夹共享”里面选择“总是启用”,然后在下方点击“添加”,然后选择共享文件夹的路径,点击确定即可

6.3 如何使用共享文件夹

当共享文件夹创建好之后,Ubuntu的共享文件夹的路径是/mnt/hgfs/share,windows就是你自己指定的路径

文件共享工具(samba)

1、Samba的安装(确认ubuntu已联网)**

sudo apt-get install samba

若下载失败执行指令 sudo apt-get install update

2、创建共享目录

切换到家目录下(可自由选择):

cd ~
mkdir share_samba //如果配置的共享目录不存在则创建
sudo chmod 777 share_samba //将共享目录属性设置为 777

3、配置Samba配置文件

一、什么是Samba

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

二、安装Samba

1、查看是否有安装samba

samba -V

如果安装了会有对应的samba版本信息输出

2、安装samba

sudo apt install samba samba-common cifs-utils smbclient

三、配置Samba服务

1、创建共享目录(以samba_workspaces为例)

mkdir samba_workspaces

2、为samba设置登录用户

先创建一个用户(以samba_user为例)

sudo useradd samba_user -s /usr/sbin/nologin

设置samba登录用户的密码

sudo smbpasswd -a samba_user

3、设置登录用户对共享目录的权限

先查看samba_workspaces目录的权限

**yishurufa@ubuntu:~$ ls -l**
总用量 44
drwxrwxr-x  5 yishurufa yishurufa 4096 914 15:12 samba_workspaces
共享目录的拥有者是yishurufa,所属组是yishurufa,登录用户samba_user需要对这个目录进行操作的话,只需要将登录用户添加到这个组里面就可以。
sudo usermod -aG $(whoami) samba_user

将samba_user添加到samba_workspaces所属组,$(whoami)可以得到当前用户名,创建的共享目录的所有者和所属组都是当前用户。

4、修改samba配置文件/etc/samba/smb.conf

sudo vim /etc/samba/smb.conf

将下面内容添加到最后(path为samba_workspaces的实际路径,下面是笔者本地的路径)

[secret]comment = this is Linux secret share directorypath = /home/yishurufa/samba_workspacesvalid user = samba_userguest ok = nowritable = yesbrowsable = yescreate mask = 0755directory mask =0755

5、如果是ubuntu 18.04还得再加一个权限ntlm auth = yes,位置放在所有共享目录定义[Share Definitions]之前

修改前

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated onesusershare allow guests = yes

修改后

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated onesusershare allow guests = yesntlm auth = yes

6、重启samba服务

sudo service smbd restart

四、测试

1、查看ubuntu的网络ip

虚拟机可以再配置一个虚拟网卡用于samba服务(设置仅主机模式)

ifconfig
2、win10环境和ubuntu环境相互ping通

3、win10环境添加网络驱动

右键“我的电脑” -> 映射网络驱动器 -> 文件夹填入 -> \192.168.56.102\secret

勾上“使用其他凭据连接”

最后输入用户名和密码
原文链接:https://blog.csdn.net/u010037542/article/details/108579650


http://chatgpt.dhexx.cn/article/APJTOxmS.shtml

相关文章

Java常用框架笔记(1)

Linux操作系统 重点在于使用&#xff0c;理论可以几乎忽略 学习原因&#xff1a; 我们一般是在Windows上开发&#xff0c;Linux上去做部署 市面上的常见的操作系统 Windows系列&#xff0c;unix系统&#xff0c;Linux系统&#xff0c;mac系统 开发场景 Windows系列&…

Windows server 2008 被ntlmssp安装攻击 解决

进行NTLM策略控制&#xff0c;彻底阻止LM响应 转载于:https://www.cnblogs.com/xishi/p/6789246.html

Session Setup Request,NTLMSSP_AUTH, User:Dmain\hostname$

被拦截smb爆破&#xff0c;在主机上抓包&#xff0c;显示使用账号:Dmain\主机名$登录失败&#xff0c;但是"主机名$"这账号根本不存在&#xff0c;测试发现(测试文件不能为空)&#xff1a; 如果2台主机在不同域里(例如AA域和BB域&#xff0c;AA域和未加域的主机)&…

NTLM认证协议及SSPI的NTLM实现

转载自&#xff1a;https://www.cnblogs.com/shuidao/p/3634637.html 没错&#xff0c;NTLM就是你听说过的那个NTLM。是微软应用最广泛的认证协议之一。 NTLM是NT LAN Manager的缩写&#xff0c;这也说明了协议的来源。NTLM 是 Windows NT 早期版本的标准安全协议。Windows 20…

linux单独用户挂载,关于Linux上SAMBA服务的权限问题(多用户挂载)

简介&#xff1a;本文探讨关于Samba服务在客户端进行多用户挂载的问题,以及对cifscreds命令的使用效果. 安装配置&#xff1a; (服务器配置要求如下,配置过程在本博客中,本文省略配置过程) 要求 在客户端desktop0配置进行多用户挂载&#xff1a; 1.安装cifs-utils软件包以支持s…

centos7 samba

RHEL7配置samba:开机自动挂载以及多用户挂载 安装samba(centos 7/redhat 7提供的samba版本是samba 4) 开机启动 启动服务 查看监听端口(使用netstat或ss命令查看连接状态) 防火墙放行 然后我们看看配置文件 smb.conf 注意配置任何服务的时候,涉及到权限访问的配置都有一个…

Windows系统安全风险-本地NTLM重放提权

经我司安全部门研究分析&#xff0c;近期利用NTLM重放机制入侵Windows 系统事件增多&#xff0c;入侵者主要通过Potato程序攻击拥有SYSTEM权限的端口伪造网络身份认证过程&#xff0c;利用NTLM重放机制骗取SYSTEM身份令牌&#xff0c;最终取得系统权限&#xff0c;该安全风险微…

samba共享服务的部署及安全优化

TOC 1.samba服务简介 在构建主机时我们需要将主机系统的数据存储在存储服务器中&#xff08;如下图所示&#xff09;&#xff0c;这样用户在需要访问系统数据资源时&#xff0c;可以通过不同的终端主机访问存储服务器&#xff0c;避免因客户端主机瘫痪导致用户数据丢失&#x…

记录一次紫狐Rootkit应急响应过程

前言&#xff1a;​ ​ ​受保密协议影响&#xff0c;此次仅介绍发现过程、思路、以及该Rootkit行为&#xff0c;以便大家后续的参考&#xff0c;此文章篇幅较长&#xff0c;建议大家穿好纸尿裤观看&#xff01; ​ 紫狐&#xff08;Purple Fox&#xff09;Rootkit概述 紫狐…

基于AD Event日志检测哈希传递攻击

01、简介 哈希传递攻击是基于NTLM认证的一种攻击方式&#xff0c;当我们获得某个管理员用户的密码哈希值&#xff0c;就可以利用密码哈希值进行横向渗透。 在域环境中&#xff0c;只有域管理员的哈希值才能进行哈希传递攻击&#xff0c;攻击成功后&#xff0c;可以访问域内任何…

linux学习笔记-RH135(六):网络文件系统

网络文件系统 一.samba服务1.samba基本信息2.samba的安装与启用3.samba用户的建立4.samba用户访问家目录6.samba访问控制7.samba的常用配置参数8.samba多用户挂载9.samba自动挂载 二.NFS1.nfs的启用2.nfs配置3.nfs配置参数4.nfs自动挂载5.自动挂载参数更改挂载版本更改挂载超时…

工作组与域环境下NTLM协议数据包分析

NTLM协议由来 早起SMB协议以明文口令形式在网络上传输,存在安全问题为了解决这个问题出现了LM协议&#xff0c; 因为LM协议过于简单很容易被破解,于是微软又提出了NTLM协议,以及更新的NTLM第2版。 发展过程:SMB -> LM -> NTLM -> NTLM v2 NTLM的作用:用于工作组…

基于NTLM认证的中间人攻击(含实战)

文章目录 中间人攻击0x01 域和工作组0x02 NTLM认证(Windows)本地认证NTLM Hash的生成 网络认证工作组环境NTLM认证流程域环境NTLM认证 0x03 域名解析协议LLMNR解析过程 NetBIOSWindows系统域名解析顺序 0x04 WPAD工作原理WPAD劫持 0x05 NTLM中继0x06 Responder介绍 攻击演示0x0…

批次更新失败服务器返回的信息,服务器出现大批量登录审核失败/NtLmSsp攻击

问题&#xff1a;服务器出现大批量登录审核失败 详细信息&#xff1a;---重点红色标注 日志名称: Security 来源: Microsoft-Windows-Security-Auditing 日期: 2020/7/28 16:47:37 事件 ID: 4625 任务类别: 登录 级别: 信息 关键字: 审核失败 用户: 暂缺 计算机: VM82 描述: 帐…

NtLmSsp 登录爆破防御办法踩的坑-网络安全:LAN管理器身份验证级别设置还原

windows系统日志看到很多相同NtlmSsp报错 于是在找了一些解决方法&#xff0c;按照下面这张图设置踩了一些坑 按照图上设置2008系统没问题&#xff0c;2019系统远程桌面就怎么设置都连不上了。 暂时正确的解决办法&#xff1a; 1、实际操作折腾一番发现上面那个LAN可以不用设…

针对ntlmssp攻击的本机安全攻防记(第一回)

一、写在前面 这个问题说来也是恼火&#xff0c;切入正题之前先谈谈最近的一段狗血的经历&#xff0c;如果比较着急&#xff0c;就直接跳到第二部分吧&#xff01;&#xff01; 新去的一家政府支持的号称做互联网的单位&#xff08;据后来观察几个部门都是凑吧的&#xff09;。…

NtLmSsp 登录爆破防御办法 附修改RDP远程桌面3389端口方法

NtLmSsp 登录爆破防御办法 附修改RDP远程桌面3389端口方法 https://www.bnxb.com/winserver/27745.html 今天在系统日志中看到一堆尝试登录远程桌面失败的提示&#xff0c;内容类似下方 - EventData SubjectUserSid S-1-0-0 SubjectUserName - SubjectDomainName - Su…

java 打包exe_Java项目打包成exe的详细教程

Java项目打包成exe的详细教程 把Java项目打包成exe共分为以下两步&#xff1a; 1、 利用Eclipse先把Java项目先打成jar包 2、 利用exe4j工具把jar包转成exe 这里以Java项目(ExeDemo)为例进行讲解 随便在一个位置新建一个文件夹&#xff0c;文件夹的名称也可以随便起&#xff0c…

java项目如何打包?

导航 步骤 1 编写编译的脚本步骤 2 打包脚本步骤 3 jar包里面是什么 D盘下面的tool文件夹已经有三个工具类了&#xff08;其实是两个&#xff0c;CustNode是为了TuziLinkedList服务的&#xff09;&#xff0c;我们这一节来进行打包&#xff0c;这样的好处就是不用每次编译都把t…

Java打包exe文件

launch4j下载地址&#xff1a;launch4j 虽然很多人都说没什么公司会使用Java编辑Swing界面程序&#xff0c;但有空余时间时总会想编写一些自己的小程序&#xff0c;经常这样乐此不彼。开发之前首先得会怎么将Java程序打包生成exe文件&#xff0c;要不然每次使用软件时都要使用…