Windows Socket API 和 Linux Socket API

本文章主要介绍 Windows 下和 Linux 下的 Socket 编程区别,即 Windows Socket API 和 Linux Socket API 的区别。 头文件Windows 环境下的 Socket 编程需要以下头文件: <WinSock2.h> <WS2tcpip.h> 笔记 如果使用 MSVC 编译器,那么还需要使用预处理指令 #pragma comment(lib, "Ws2_32.lib") 来链接 Ws2_32.lib 库。 ...

2024年06月16日 · 2 分钟 · Cassius0924

Windows VSCode 使用 JetBrians Mono 字体

本文主要介绍如何在 Windows 系统下的 Visual Studio Code 中使用 JetBrians Mono 字体。 下载字体可能你跟着网上很多教程一样,一上来就在 VS Code 中设置字体,结果发现设置不生效,这是因为你没有安装 JetBrians Mono 字体。 JetBrians Mono 字体下载地址:JetBrainsMono 安装字体下载字体后,解压缩,进入 ttf 文件夹,找到 JetBrainsMono-Regular.ttf 文件,双击打开,点击安装即可。当然你也可以全部字体都安装 :) 设置 VS Code打开 VS Code 的设置,搜索 editor.fontFamily,将其值设置为 JetBrains Mono,如下图所示: 重启 VS Code最后一步,重启 VS Code 即可。

2024年06月16日 · 1 分钟 · Cassius0924

解决 “warning C4819- 该文件包含不能在当前代码页(936)中表示的字符” 问题指南

起因是因为我在对我的 C++ 项目进行跨平台适配,从 macOS 平台移植到 Windows 平台时,在使用 Cmake + MSVC 编译后,出现了这个问题。 问题原因这是由于 Windows 平台默认使用的是 GBK 编码,而 macOS 平台上使用的是 UTF-8 编码。 解决方法方法一在 CMakeLists.txt 文件中添加如下代码: add_compile_options("$<$<C_COMPILER_ID:MSVC>:/source-charset:utf-8>") 方法二在 CMakeLists.txt 文件中添加如下代码: if(MSVC) target_compile_options(<你的项目名> PRIVATE "/utf-8") endif()

2024年06月16日 · 1 分钟 · Cassius0924

C# Protobuf 接收数据并解析数据

在流里读出数据后,需要将数据包大小缩短成有效大小,即 bytesRead 长度。 下面是 C# 端接收并解析数据的示例代码: private void ReceiveMessage() { stream = client.GetStream(); int bytesRead; while (isKeepReading) { if (stream.CanRead) { buffer = new byte[client.ReceiveBufferSize]; bytesRead = stream.Read(buffer, 0, client.ReceiveBufferSize); if (bytesRead > 0) { MemoryStream protoStream = new MemoryStream(buffer,0, bytesRead); Cas.Proto.DataMessage dataMessage = Cas.Proto.DataMessage.Parser.ParseFrom(protoStream); switch (dataMessage.Type) { case DataMessage.Types.Type.Mesh: Debug.Log("Mesh类型"); break; default: break; } } } } }

2024年06月16日 · 1 分钟 · Cassius0924

C++ 中位运算的妙用:与运算和或运算的合并标志位

当我们处理程序中的多个标志位时,将它们合并成一个整数是一种常见的技巧。这种做法不仅有助于提高代码的可读性,还使得对多个标志位进行操作更为方便。 在C++中,可以使用按位或(|)运算符来实现这一功能。 合并标志位的基本思想在C++中,合并标志位的基本思想是将多个标志位的二进制表示中的相应位进行按位或运算,形成一个包含所有标志位信息的整数。这样,就能够用一个整数表示多个不同的状态或选项。 代码示例#include <iostream> int main() { // 定义三个标志位 const int FLAG_A = 0b0001; const int FLAG_B = 0b0010; const int FLAG_C = 0b0100; // 合并标志位 int flags = FLAG_A | FLAG_C; // 检查是否设置了某个标志位 if (flags & FLAG_A) { // True std::cout << "FLAG_A is set." << std::endl; } if (flags & FLAG_B) { // False std::cout << "FLAG_B is set." << std::endl; } if (flags & FLAG_C) { // True std::cout << "FLAG_C is set." << std::endl; } return 0; } 在这个示例中,首先定义了三个标志位 FLAG_A、FLAG_B 和 FLAG_C,它们分别对应二进制的 0001、0010 和 0100。然后,使用 | 运算符将 FLAG_A 和 FLAG_C 合并成 flags。 接下来,使用按位与运算符 & 来检查 flags 中是否设置了每个标志位。如果某个标志位被设置,相应的条件语句将会执行。 优点与用途 可读性提高: 将多个标志位合并成一个整数可以提高代码的可读性。通过使用有意义的常量名称,可以更清晰地了解整数表示的含义。 便于操作: 合并后的整数可以方便地进行各种按位操作,如按位与、按位或等,而无需单独处理每个标志位。 节省内存: 在某些情况下,将多个标志位合并成一个整数可能节省内存,特别是当标志位数量较多时。 在实际编码中,合并标志位是一种常见的编程技巧,适用于需要处理多个二进制状态的情况。这种技术不仅简化了代码,还使得代码更易维护和扩展。

2024年06月16日 · 1 分钟 · Cassius0924

Cassius0924 的 VSCode 插件

# .NET Install Tool for Extenstion ABC C/C++ C/C++ Extension Pack C/C++ Themes C# C# Dev Kit CMake CMake Language Support Cmake Tools Codelf Code Runner Code Snap Code Together Color Highlight Color Picker CSS Peek D Dev Containers Docker Doxygen Documentation Genertor EFG Git Graph git-commit-plugin GitHub Copilot GitHub Copilot Chat GitHub Copilot Labs GitHub Pull Resquest and Issues HI IntelliCode API Usage Examples IntelliCode for C# Dev Kit IntelliJ IDEA New UI Theme J Jetbrains Fleet Theme JetBrains Icon Theme JetBrains IDE Keymap KL Live Sever Live Share M Markdown Preview Github Styling Markdown Preview Mermaid Support Marp for VS Code MASM masm-code MASM/TASM Material Icon Theme mypy NOP Pylance Python QR Remote - SSH: Editing Configuration Files Remote - Development Remote Explorer REST API Ruff S Slidev T TODO Highlight v2 UV Vim VSCode DOSBox VSCode Git Commit Message W WSL XYZ Marp for VS Code

2024年06月16日 · 1 分钟 · Cassius0924

Google Coral Dev Board 修改风扇转动温度阈值指南

Google Coral Dev Board 是一款功能强大的开发板,可用于构建机器学习应用程序。该板配备了 Edge TPU,这是一款专门用于机器学习任务的加速器。Edge TPU 非常高效,但它也可能会产生热量。如果温度过高,Edge TPU 可能会降频或关闭。 查看目前 TPU 温度使用命令查看目前开发板核心 TPU 的温度,输出温度为1000倍的摄氏度。 cat /sys/class/thermal/thermal_zone0/temp 如输出54000,则代表当前温度为54摄氏度。 修改散热器温度阈值禁用热管理: echo "disabled" > /sys/devices/virtual/thermal/thermal_zone0/mode 修改散热器温度阈值为50摄氏度 echo 50000 > /sys/devices/platform/gpio_fan/hwmon/hwmon0/fan1_target

2024年06月16日 · 1 分钟 · Cassius0924

HammerSpoon 入门指南

介绍HammerSpoon 这是一款强大的OS X自动化工具。 HammerSpoon 本质上就是操作系统和Lua脚本引擎之间的桥梁。 HammerSpoon 之所以强大,在于它提供了一系列向用户公开特定系统功能模块的扩展。有了这些扩展,用户便可利用Lua脚本来控制 macOS 的各个方面。 安装建议直接使用 Homebrew 安装。 brew install hammerspoon --cask 手动安装参考官方 Github。 参考文档 HammerSpoon 入门指南 HammerSpoon API 文档 HammerSpoon 常见问题 HammerSpoon 配置示例 快速开始启动应用安装完毕后启动 HammerSpoon,设置中打开辅助功能。 接着点击 Open Config 打开配置文件。下面开始教程。 Hello World-- Hello World hs.hotkey.bind({"cmd", "alt", "shift", "ctrl"}, "W", function() hs.alert.show("HammerSpoon is working!") end) 每次修改配置文件后都需要点击 Reload Config。 以上代码实现了点击快捷键 command + option + shift + control + w,在屏幕中间显示弹窗提示的功能。 也可以使用 macOS 原生通知形式 -- Hello World(macOS native notification) hs.hotkey.bind({"cmd", "alt", "shift", "ctrl"}, "Q", function() hs.notify.new({title="macOS Native Notification", informativeText="HammerSpoon is working"}):send() end) ...

2024年06月16日 · 1 分钟 · Cassius0924

HoloLens 应用程序渲染不出 Mesh 面片的解决方法

问题当项目在 Unity 测试 Mesh 面片渲染正常,而打包部署到 HoloLens 后就无法正常显示 Mesh 面片了。 失败原因可能出在 Holo 不支持程序代码所用的 Shader 着色器,需要使用 MRTK3 官方提供的 Shader 着色器。 解决方法默认前提你的项目已经安装了 MRTK3 开发包。 MRTK3 官方可用的彩色 Mesh 着色器为 Mixed Reality Toolkit/Dashed Ray。 UnityEngine.Mesh mesh = new UnityEngine.Mesh(); mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; #当面片数量超过65535时需要设置此项 GetComponent<MeshFilter>().mesh = mesh; Material material = new Material(Shader.Find("Mixed Reality Toolkit/Dashed Ray")); GetComponent<MeshRenderer>().material = material;

2024年06月16日 · 1 分钟 · Cassius0924

iTerm2 配置失去焦点时保持命令行窗口指南

配置步骤按下 cmd + , 打开 iTerm2 设置,选择 Profiles 面板,切换到 Keys 选项卡,点击 Configure Hotkey Windows。 打勾 Pin hotkey window 选项。 大功告成,配置完后鼠标在点击 iTerm2 命令行窗口以外的界面时,命令行窗口就不会自动隐藏了。

2024年06月16日 · 1 分钟 · Cassius0924