在Google Pixel 3上安装Magisk
前言作为七年iOS用户,上次用安卓手机已经是很久以前了,最近在B站看到TESTV的索尼ZX1C的评测感觉很心动,但是去海鲜市场发现大多数的ZX1C都是日版运营商合约机,似乎不能解BL锁,于是在评论地下又发现GoolePixel3这款机器。在早些年前就看过Pixel的测评,原生安卓系统很是吸引我,并且也没有OEM锁可以随意折腾,所以就在海鲜市场以500左右的价格淘到了一个成色不错的Pixel3。到手后也是被细腻的动画折服了,但是Pixel3不支持中国电信运营商,需要安装解锁运营商的模块才可以使用,而模块依赖于Magisk,遂产生此想法。在收集资料的过程中发现网上的教程或多或少都有些模糊,因此决定在此非常详细的介绍我的安装步骤,也是希望能给机圈做些贡献吧。
前期准备To be continued……
C++学习笔记_第三章_第四节
用getchar和putchar函数进行字符的输入和输出除了可以用cin和cout语句输出和输出字符外,C++还保留了C语言中用于输入和输出单个字符的函数,使用很方便。其中最常用的有getchar函数和putchar函数。
putchar函数(字符输出函数)putchar函数的作用是向终端输出一个字符,例如:
putchar (c);
它输出变量c的值。
例:输出单个字符
编写程序:
123456789#include <iostream>using namespace std;int main(){ char char1, char2, char3; char1 = 'B'; char2 = 'O'; char3 = 'Y'; putchar(char1); putchar(char2); putchar(char3); putchar('\n'); putchar(66); putchar(79); putchar(89); putchar(10); ...
C++学习笔记_第三章_第三节
输入流与输出流的基本操作cout语句一般格式为
cout << 表达式1 << 表达式2 << … <<表达式n;
cin语句一般格式为
cout >> 变量1 >> 变量2 >> … >>变量n;
在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,并不是插入一个数据就马上输出一个数据,而是先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout 语句中的endl(或\n,ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。系统提供的标准输出流中的数据向系统默认的设备(一般为显示器)输出。
一个cout 语句可以分写成若干行。比如:
cout << “This is a C++ program.” << endl;
同样也可以这样写:
1234cout << "This is" //注意行末尾无分号<< " ...
C++学习笔记_第三章_第二节
赋值操作前面已介绍,对一个变量的赋值是通过赋值运算符“=”来实现的。在前面两章中已经多次用到赋值语句,由于赋值语句应用十分普遍,所以专门再讨论一下。
C++的赋值语句具有其他高级语言(如QBASIC,Pascal,FORTRAN)的赋值语 句的功能。但不同的是:C++中的赋值号“=”是一个赋值运算符,可以写成
a=b=c=d;
它相当于
a=(b=c=d);
其作用是先将变量d的值赋给变量c,再把变量c的值赋给变量b,最后把变量b的值赋 给变量a。
而在其他大多数语言中赋值号不是运算符,上面的写法是不合法的。
关于赋值表达式与赋值语句的概念。其他多数高级语言没有“赋值表达式”这 一概念。在C++中,赋值表达式可以包括在其他表达式之中,例如,
if((a=b)>0)cout<<”a>0”<<endl;
按语法规定if后面的()内是一个条件,例如可以是“if(x>0)···”。现在在x的位置上换 上一个赋值表达式a=b,其作用是:先进行赋值运算(将b的值赋给a), ...
C++学习笔记_第三章_第一节
C++的程序结构和C++语句在第1章中介绍了几个简单的C++程序。第2章介绍了C++程序中用到的一些基本要素(常量、变量、运算符和表达式等),它们是构成程序的基本成分。本章将接着介绍为编写简单的程序所必须掌握的一些内容。
从第1章已知,一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件)。每一个程序单位由以下3个部分组成:
预处理指令。如#include指令和#define指令。
全局声明。在函数外对数据类型、函数以及变量的声明和定义。
函数。包括函数首部和函数体,在函数体中可以包含声明语句和执行语句。
下面是一个完整的C++程序:
12345678910#include<iostream> //预处理指令using namespace std; //在函数之外的全局声明int a=3; //在函数之外的全局声明int main() //函数首部{ float b; //函数内的声明 b=4.5; ...
C++学习笔记_第二章_第五节
逗号运算符和逗号表达式C++提供一种特殊的运算符—逗号运算符,又称为“顺序求值运算符”。用它将两个表达式连接起来。如
3 + 5,6 + 8
是一个逗号表达式。逗号表达式的一般形式为
表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式
a = 3 * 5,a * 4
对此表达式的求解,读者可能会有两种不同的理解:一种理解认为3 * 5,a * 4是一个逗号表达式,先求出此逗号表达式的值,如果a的原值为3,则逗号表达式的值为12,将12赋给a,因此最后a的值为12。另一种理解认为:a = 3 * 5是一个赋值表达式,a * 4是另一个表达式,二者用逗号相连,构成一个逗号表达式。这两种理解哪一种对呢?实际上:赋值运算符的优先级别高于逗号运算符,因此应先求解a = 3 * 5(也就是把a = 3 * 5作为一个表达式)。经计算和赋值后得到a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。
逗号表达式的一般形式可以扩展为
表达式1 ...
C++学习笔记_第二章_第四节
赋值运算符和赋值表达式赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。
赋值过程中的类型转换如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时自动进行类型转换。
将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。如i为整型变量,执行“i = 3.56”的结果是使i的值为3,在内存中以整数形式存储。
将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。如要执行“f = 23”,将23赋给float型变量f,按单精度指数形式存储在f中。如要执行“d = 23”,即将23赋给double型变量d,则将23以双精度指数形式存储到d中。
将一个double型数据赋给float变量时,要注意数值范围不能溢出。例如:
123float f;double d=123.456789e100;f=d;
就会出现溢出的错误,因为超过了float型的数据范围。
字符型数据赋给整型变量,将字符的ASCII码 ...
C++学习笔记_第二章_第三节
C++的运算符C++的运算符十分丰富,使得C++的运算十分灵活方便。例如把赋值号( =)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的。C++提供了以下运算符。
算术运算符
+ (加) - (减) * (乘) / (除) % (整除求余) ++ (自加) – (自减)
关系运算符
> (大于) < (小于) == (等于) >= (大于或等于) <= (小于或等于)
逻辑运算符
&& (逻辑与) || (逻辑或) ! (逻辑非)
位运算符
<< (按位左移) >> (按位右移) & (按位与) | ( 按位或) /\ (按位异或) ~ (按位取反)
赋值运算符( = 及其扩展赋值运算符)
条件运算符( ? : )
逗号运算符( , )
指针运算符( * )
引用运算符和地址运算符( & )
求字节数运算符( sizeof )
强制类型转换运 ...
C++学习笔记_第二章_第二节
变量什么是变量变量就是在程序运行中值可以改变的量,每一个变量都应该有一个名字,称为变量名,并在内存中占据一定的存储单元,并在该存储单元中存放变量的值。变量名和变量值是两个不同的概念,变量名代表内存中的一个存储单元,在对程序进行编译连接时由系统为其分配地址,在程序中从变量中取值实际上是通过变量名找到相应的内存单元,并从中读取数据。
变量名命名规则首先让我们来了解以下标识符。和其他高级语言一样:用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为标识符(identifier)。简单地说,标识符其实就是名字。变量名就是一种标识符,变量名必须遵循标识符的命名规则。
C++规定标识符只能由字母、数字、和下划线_组成,且第一个字符必须是字母或者下划线。
以下是一些合法的标识符,同时也是合法的变量名:
You,HEY,_day,month,YeAr,xiao_min
以下是一些不合法的标识符:
Y.U.M,#123,$555,5E,C++,xiao-hua,ni hao
注意,在C++中,大写字母和小写字母被认为是两个不同的字符。因此YOU和you是两个不一样的变量名。一般来说,变量 ...
攻防世界Crypto1-4题学习笔记
第一题:base64 NO.GFSJ0522题目描述:
元宵节灯谜是一种古老的传统民间观灯猜谜的习俗。 因为谜语能启迪智慧又饶有兴趣,灯谜增添节日气氛,是一项很有趣的活动。 你也很喜欢这个游戏,这不,今年元宵节,心里有个黑客梦的你,约上你青梅竹马的好伙伴小鱼, 来到了cyberpeace的攻防世界猜谜大会,也想着一展身手。你们一起来到了小孩子叽叽喳喳吵吵闹闹的地方,你俩抬头一看,上面的大红灯笼上写着一些奇奇怪怪的 字符串,小鱼正纳闷呢,你神秘一笑,我知道这是什么了。
题目附件:
1Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9
由题目可知,这题和Base64编码相关,让我们来了解一下Base64编码的一般用途及特征:
Base64编码通常用于将给定字符串转换为可打印字符形式。,以下为base64编码后字符的特点:
可打印字符:Base64编码将二进制数据转换为一组可打印字符,包括字母(A-Z,a-z)、数字(0-9)和一些特殊字符(如”+”和”/“),这样的编码结果可以在文本环境中进行传输和存储。
字符集:Base64编码使用6 ...