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 min · 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 min · 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 min · 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 min · 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 min · 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 min · Cassius0924

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

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

2024年06月16日 · 1 min · Cassius0924

Jetson nano 安装 Jtop 和 Jtop 使用指南

本文将为你介绍 Jtop,它是一个基于 Python 的系统监控工具。Jtop 通过终端界面展示系统资源的使用情况,包括 CPU、内存、磁盘、网络等。本文将详细介绍 Jtop 各个面板的作用和功能。 安装先安装pip3 sudo apt install python3-pip Jtop 可以通过 pip 来安装,您可以通过以下命令来安装: sudo pip3 install -U jetson-stats 使用在终端中输入以下命令来启动 Jtop: jtop 在 Jtop 启动后,您可以使用键盘的左右箭头来选择面板,使用 Tab 键来切换到不同的面板,使用 Ctrl + C 命令来退出 Jtop。 面板介绍ALL 面板ALL 面板简要展示了主板的各种信息,包括 CPU、GPU、内存、磁盘、风扇以及关于 jetson_clocks、NVPmodel 等的信息。 GPU 面板GPU 面板主要展示了系统 GPU 的使用情况。在 GPU 面板中,您可以看到系统当前的 GPU 利用率、GPU 温度、GPU 风扇转速、 GPU 内存使用情况等信息。同时,您也可以查看各个进程对 GPU 的使用情况。 CPU 面板CPU 面板主要展示了系统 CPU 的使用情况。在 CPU 面板中,您可以看到系统当前的 CPU 利用率、每个 CPU 核心的利用率、以及各个进程的 CPU 使用情况。您可以使用键盘上下箭头来选择进程,使用回车键来查看进程详情。 MEM 面板内存面板主要展示了系统内存的使用情况。在内存面板中,您可以看到系统当前的内存利用率、总内存、可用内存、已经使用的内存等信息。同时,您也可以查看各个进程的内存使用情况。 ...

2024年06月16日 · 1 min · Cassius0924

Jetson Xavier NX (ARM) 使用 PyTorch 安装 Open3D-ML 指南

由于 Jetson 为 ARM64 (aarch64) 的系统架构,所以不能用 pip install 直接安装,需要通过源码编译。 升级系统 JetPack由于 Open3D-ML 目前只支持 CUDA 10.0 以及 CUDA 11.*,并且 JetPack 的 CUDA 开发环境只有10.2、11.4以及12.2,所以我们只能选择 CUDA 11.4 进行安装。 使用 jtop命令查看 JetPack 版本。如果 Jetson 系统的 JetPack 低于 5.1.2 则需要通过 SDK Manager 升级到 JetPack 5.1.2。 如果你的系统已经是 JetPack 5.1.2 那我也推荐你通过 SDK Manager 重新安装一遍,排除难以发现的错误。 详细指南参考文章[Jetson Xavier NX 升级或重新安装 JetPack 指南]。 安装 PyTorch安装教程参考文章[Jetson Xavier NX 安装 CUDA 支持的 Pytorch 指南]。 注意,PyTorch 的 CUDA 支持版本需要和 Open3D-ML 的一致,同为 CUDA 11.4。否则与最后安装 Open3D-ML 的时候会报错: ...

2024年06月16日 · 2 min · Cassius0924

Jetson Xavier NX 安装 CUDA 支持的 PyTorch 指南

本指南将帮助开发者完成在 Jetson Xavier NX 上安装 CUDA 支持的 PyTorch。 安装方法在 Jetson 上安装 Pytorch 只有两种方法。 一种是直接安装他人已经编译好的 PyTorch 轮子; 一种是自己从头开始开始构建 PyTorch 轮子并且安装。 使用轮子安装可以从我的 GitHub 仓库 直接下载我编译好的 PyTorch 轮子(torch-1.13.0-cuda-11.4-python-3.8-aarch64)。 安装前先确保 python 版本为 PyTorch 轮子对应的 Python 3.8。 下载完毕后使用pip install安装: sudo -H pip install torch-1.13.0a0+git7c98e70-cp38-cp38-linux_aarch64.whl 如果你以前安装过 torch 的其他版本,则需要添加--force-reinstall覆盖安装。 其他低于 CUDA 11 的 PyTorch 轮子可以在 Qengineering 的 GitHub 仓库 寻找。 编译源码安装接下来说一下重点,自己从源码构建轮子并安装。自行构建需要花费数个小时的时间。 PyTroch 1.11.0 以及以上版本只能在 Ubuntu 20.04 上安装。 安装依赖sudo apt-get update sudo apt-get upgrade sudo apt-get install ninja-build git cmake sudo apt-get install libjpeg-dev libopenmpi-dev libomp-dev ccache libopenblas-dev libblas-dev libeigen3-dev sudo pip3 install -U --user wheel mock pillow sudo -H pip3 install testresources setuptools==58.3.0 scikit-build 下载源码请克隆自己需要的 PyTorch 版本,修改-b后的版本参数。 ...

2024年06月16日 · 2 min · Cassius0924