# C++

argc和argv是什么

C/C++语言中的main函数,经常带有参数argc,argv,如下: 

1
2
3
4
5

int main(int argc, char** argv)

int main(int argc, char* argv[])

这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,argv存储了所有的命令行参数。假如你的程序是hello.exe,如果在命令行运行该程序,运行命令为:

1
hello.exe Shiqi Yu  

那么,argc的值是 3,argv[0]是"hello.exe",argv[1]是"Shiqi",argv[2]是"Yu"。   
### argc和argv的使用

下面的程序演示argc和argv的使用:  

1
2
3
4
5
6
7
#include <stdio.h>
int main(int argc, char ** argv)
{
int i;
for (i=0; i < argc; i++)
printf("Argument %d is %s.\n", i, argv[i]);return 0;
}

假如上述代码编译为hello.exe,那么运行 

hello.exe a b c d e
将得到  

1
2
3
4
5
6
Argument 0 is hello.exe.  
Argument 1 is a.
Argument 2 is b.
Argument 3 is c.
Argument 4 is d.
Argument 5 is e.

运行 hello.exe lena.jpg
将得到  

1
2
Argument 0 is hello.exe.
Argument 1 is lena.jpg.

阅读全文 »

# bat

1. start 命令的使用方法

start 命令用于在新窗口中启动应用程序、命令或批处理文件。使用 start 命令时,可以指定要启动的程序的路径和命令行参数。下面是 start 命令的基本语法:

1
start ["title"] [/d path] [/i] [/min] [/max] [/separate | /shared] [/low | /normal | /high | /realtime] [/wait] [/b] [command/program] [parameters]

其中,方括号表示可选参数。下面是各个参数的详细说明:

  • “title”: 可选参数,指定窗口标题。
  • /d path: 可选参数,指定启动程序的工作目录。
  • /i: 可选参数,以新窗口中的分离模式启动程序。
  • /min: 可选参数,启动程序时最小化窗口。
  • /max: 可选参数,启动程序时最大化窗口。
  • /separate | /shared: 可选参数,指定启动程序时使用的窗口类型。/separate 表示在新的独立窗口中启动程序(默认值),/shared 表示在共享控制台窗口中启动程序。
  • /low | /normal | /high | /realtime: 可选参数,指定启动程序时使用的进程优先级。/low 表示低优先级,/normal 表示正常优先级(默认值),/high 表示高优先级,/realtime 表示实时优先级。
  • /wait: 可选参数,等待程序结束后再退出。
  • /b: 可选参数,以后台模式启动程序。

2. 示例

下面是一些示例,演示如何使用 start 命令启动不同类型的应用程序:

  • 启动记事本:
1
start notepad.exe
  • 启动计算器:
1
start calc.exe
  • 启动 Internet Explorer:
1
start iexplore.exe "http://www.example.com"
  • 启动 Windows Media Player:
1
start wmplayer.exe "C:\Users\UserName\Music\Sample.mp3"
  • 启动命令提示符:
1
start cmd.exe
  • 启动 PowerShell:
1
start powershell.exe

除了启动应用程序外,start 命令还可以启动批处理文件。例如,可以创建一个名为 “test.bat” 的批处理文件,其中包含以下命令:

1
start notepad.exe

然后在命令提示符中执行以下命令来运行该批处理文件:

1
test.bat

这将启动记事本程序。

阅读全文 »

# bat

下面是一个简单的代码用于检测clash.exe是否运行:

1
2
3
4
tasklist|findstr -i "notepad.exe"
if ERRORLEVEL 1 (
echo 程序未启动
)

示例

运用这个我们可以写一个自动保持notepad启动的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

@echo off
title restart 自动化脚本
:again
tasklist|findstr -i "notepad.exe"
if ERRORLEVEL 1 (
echo notepad is off in %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%
start "" "C:/Windows/notepad.exe"
)
cd /d "D:/"

choice /t 30 /d y /n > nul

goto again

阅读全文 »

# bat

在bat中实现延时有以下几种方法(我见过的): ## 1. 使用ping命令实现延时

使用ping命令可以实现延时的效果,命令如下:

1
ping 127.0.0.1 -n 11 >nul
  1. -n 指定ping的次数,每次大概间隔1s,>nulping过程回显信息给屏蔽
  2. ping命令实现的延时,时间精度:大约1s,内存占用:ping命令所占用空间
  3. 注意闭坑:ping 从第1次发出请求到接收到回显数据几乎是瞬间的,所以你如果想实现10秒的延时,需要设置-n 为11(至少针对ping 127.0.0.1 回环地址是这样),网上很多说需要多少秒,-n参数值就设置多少秒, 真是有些误人子弟呢!
  4. 我还从网上看到过使用-w参数,指定超时等待时间来作为延时时间的,这不是可能,除非指定的地址ping不通,否则这个延时实现根本不可靠

通过超时来延时

1
2
3
4
5
6
7
timeout /t 4 /nobreak >nul
````

## 通过Choice的超时判断作为延时

```bash
choice /t 30 /d y /n > nul
阅读全文 »

# bat

在bat中可以使用start打开其他应用而不阻塞当前进程,常见的用法有以下几种

基础用法

start "程序框名字" "要启动的应用的位置"

进阶用法

带参数

直接在启动应用的位置后面加即可,例如:start /b "" E:\AgencyProxyTools\messageBox 0

最小化运行

在start后面加上/min即可

保持在当前对话框进行

在start后面加上/b即可,此时start启动的应用会在其他进程运行,但是输出的结果会保持在同一对话框内

特殊情况

start伴随的进程随着当前进程一并终止

可以考虑间接调用:

1
2
3
4
5
6
%a.bat%
Echo Off
SetLocal

start /b "" E:\AgencyProxyTools\openClash.bat
exit
1
2
3
4
5
6
7
%openClash.bat%
Echo Off
SetLocal

start /min "" "E:\!TOOLS\PC\Clash\Clash.exe"

Exit

a.bat -> openClash.bat -> clash.exe

这样的话clash就不会随着a.bat而结束了

阅读全文 »

# python
# 未完成

1
2
3
4
5
我的pyinstaller并没有调试好,

在这样的一通操作后生成的exe并不能正常运行

我没有找到解决的办法,似乎是pyinstaller默认安装到了系统内部的python上,而不是conda的虚拟环境内,导致虚拟环境内的包并没有被打包进exe

为了方便py代码可以在其他没有python环境的设备上运行,使用pyinstall将其打包为exe格式是一种十分简单的方法。但是在安装并使用pyinstall的过程中,本人遇到了不少麻烦,而后摸索出了正确的路,下面记录以下我的历程。

背景

win11,安装了anaconda和vs,这两个不共用一个python

所以说在安装之前还需呀将anaconda的python设置为首选的python,将其在环境变量中的优先级提高。

安装历程

安装pyinstall

使用:

pip install pyinstaller

来安装pyinstall

执行pyinstall

正常执行pyinstaller -c -F textMessage.py就可以在显示打包进程的前提之下打包py文件了。
但是这个时候会报错:

'pyinstaller' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

这个时候就需要将pyinstall.exe添加置系统变量里面的PATH,但是anconda的文件十分的杂乱,我找了半天都没有找到,最后是使用everything1来对电脑文件进行检索找到的。下面是我的路径:

C:\Users\Lenovo\AppData\Roaming\Python\Python310\scripts\pyinstaller.exe

pyinstall报错

在能运行pyinstall之后,pyinstall报错了:The 'pathlib' package is an obsolete backport of a standard library package and is incompatible with PyInstaller.

pathlib是一个anaconda自带的过时的包,pyinstall不支持这个包,将这个包删除即可:python -m pip install pathlib

[1]:"Everything" 是 Windows 上文件名搜索引擎。Command Line Interface - voidtools

阅读全文 »

# 杂谈
# 游戏体验日记

背景

除了制作十分精良的独立游戏和所谓的商业游戏之外,我常常也会游玩一些二次元游戏以达到我对于可爱妹子的摄入需求,那么为了开荒一款游戏,常常是需要十分大的时间成本的。
想要解决游玩游戏的时间成本,又想要获得良好的游戏体验(因为二次元游戏常常会包含或多或少的养成元素,养成程度会影响到游戏的体验),最好的选择就是花钱。

同时对于那种可能只是想要玩一段时间的游戏,也可以考虑将账号卖出,从而使得自己花费的时间转化为金钱作为补偿。

实际上,游戏账号交易已经是一个较为普遍的市场,甚至有人以此牟利。

账号买卖注意事项

通常来说,为了体验自己抽和通关的乐趣,我们常常会选择购买初始号。

初始号指的是没有推剧情和代充,只是通过一些活动和通关一些基本的关卡来获得资源,且获得了一定的抽卡资源的账号。购买此类账号的时候需要注意以下几点:

1. 选择信用度高的商家

购买之前先确认商家是否可信,在较为小的性价比的提升之下并不需要去贪图那点蝇头小利。多花点钱在较为可信任的商家购买可以省下很多烦恼

2. 确认账号信息

在购买之前,请务必核对账号信息,比如: 1. 账号是否已经首充? 2. 账号是否可以更换绑定信息? 3. 等等等等

1
2
3
4

账号一般分为活绑和死绑定两种,其中死绑指的是无法更换绑定的账号或者说是手机号(使用的是一次性的验证码注册的手机号)。

死绑的账号无法更换密码,且较为容易被二次售卖,价格也相较来说更为便宜。一般只是作为抽卡找个乐子玩。

3.确认游戏是否存在找回方式

有一些游戏可以通过其他的手段来将账号找回,购买账号的时候需要注意是否存在其他的找回方式,并且加以防范。

1
2
3
title:案例

碧蓝航线可以通过举报账号违规封号,然后使用实名认证的身份证来找回的方式。

4.确认是否划算

理清楚自己的目标,检验是否划算。

举个例子,我想要购买战双新出的皮肤,且实际上其他的东西对我的影响不大。如果使用我自己原本的号进行氪金购买的话,至少需要氪金250¥(算上首充的翻倍)。
但是如果我选择购买账号的话,可以获得一堆资源和部分限定道具(概率),还可以拥有足够抽出新皮肤的黑卡。而这样的账号才50¥

实际购买经验

实际购买过一次战双的账号之后,就目前来说,体验良好。花费50获得了我期望中的东西,且剧本通关程度和我原本的账号相近,所以说体验剧情也是不会差太多的。

阅读全文 »

# python

背景

python中hex内置函数无法将生成的16进制码自动补0,比如说:

1
2
3
4
5
6
print(hex(2))
0x2 #输出
print(hex(25225842))
0x180ea72
print(hex(255842))
0x3e762

很明显,这个一点都不好便于后续处理,我们总喜欢规整的嘛,全是总共8位的16进制就是32位数,就像:

1
2
0x00112233
0x12345678

解决办法

 通过多次查资料和尝试,得到如下:

1
2
 def myhex(n):
return "".join(f"0x{n:08x}")

阅读全文 »

# 杂谈

背景

最近qq搞了个龙年可以刷龙表情的小彩蛋,qq用户可以刷出五颜六色的龙,其中还有一个隐藏款。

hmmm然后就发现了一件比较有意思的事情……

qq 表情实现方式

技术原理

qq的表情的实现方式原理原来是两个个特殊的字符:
前者是一个控制字符,后者是特定序号对应的拉丁字母

QQ隐藏表情代码?! - 哔哩哔哩 (bilibili.com)

\u0014\u18a,比如说这个 就是大龙

表情一览

复制到qq里面即可正常显示

1
2
3
4
  	

 
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƁƂƃƄƅƆƇƈƉƊ
## qq 特殊文字样式

qq中还有一些特殊的文字样式,比如说动态文本以及控制文本的特殊颜色的代码,实现原理和上面一样,实际上都是通过特殊的文本来实现的控制渲染。

特殊文本样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<%ĀĀ␇Þ>潮流

<%ĀĀ␇Ý>朝夕

<%ĀĀ␇Ü>粉黛

<%ĀĀ␇Û>夜空

<%ĀĀ␇Ú>晚秋

<%ĀĀ␇Ù>糖果缤纷

<%ĀĀ␇Ø>盛夏

<%ĀĀ␇×>日出

<%ĀĀ␇Ö>霓虹闪烁

<%ĀĀ␇Õ>马卡龙

<%ĀĀ␇Ô>科技感

<%ĀĀÓ>黄昏

<%ĀĀÒ>高级灰

<%ĀĀÑ>冬梅

<%ĀĀÐ>初春

<&ÿÿ5@>红色

<&ÿĀĀĀ>黑色

<&ÿÿ5@>红色

<&ÿÿ]•>粉色

<&ÿÒUÐ>紫色

<&ÿ␇Çý>蓝色

<&ÿ␇ÄW>绿色

<&ÿÿÏP>黄色

动态表情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

<$ǿĀD>变色钻石

<$ÿĀV>手掌比心

<$ÿĀ>可爱的手掌

<$²>滑稽

<$ÿĀB >四叶草

<$ǿĀ฿ >手拿玫瑰

<$ǿĀ >尬笑兔

<$ǿĀ4%ZX$ǿĀ4ZX$ǿĀ4>顶哭你

<$ÿĀ?V>爱心小熊

<$ÿĀZX$ÿĀ >爱你

<$ÿĀX%Z比耶

<$ÿĀX#Z小茄子

<$ÿĀ&>吃力小飞猪

<$ÿĀ&>惊喜小飞猪

<$ÿĀ&>可爱小飞猪

<$ÿĀ&>恶魔

<$ÿĀD >疑问

<$ÿĀD#>坏坏熊

<$ÿĀ>不约

<$ǿĀF>爱心

<$ÿĀ >小黑

<$ǿĀC>可爱猫爪

Reference

0%