成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

別再用 unsigned char 了,std::byte 才是真愛!

開發
想象一下,如果字節是一個演員,那么 std::byte 就是一個純粹的表演藝術家 - 它只專注于做一件事:表示原始的字節數據。

大家好!今天讓我們來聊聊 C++17 中引入的一個有趣的小伙伴 - std::byte!

想象一下,如果字節是一個演員,那么 std::byte 就是一個純粹的表演藝術家 - 它只專注于做一件事:表示原始的字節數據 ?

#include <cstddef>

enum class byte : unsigned char {};  // 就是這么簡單!

為什么需要 std::byte???

std::byte 與 unsigned char 的關鍵區別:

#include <cstddef>

// unsigned char - 可以進行算術運算 ??
unsigned char old = 42;
old = old + 1;     // 允許,但這對字節操作來說不合理!

// std::byte - 只允許位運算 ?
std::byte modern{42};
// modern = modern + 1;  // 編譯錯誤!
modern = modern | std::byte{1};  // 正確的位運算方式 ?

本質區別:

  • unsigned char: 被視為數值類型,允許算術運算 ??
  • std::byte: 純粹的字節容器,只支持位運算 ??
  • 這種限制讓代碼更安全、語義更清晰!??

玩轉 std::byte ??

來看看如何玩轉這個字節小精靈 std::byte 吧! ??

#include <cstddef>
#include <iostream>
#include <bitset>

int main() {
    // 創建一個神秘字節 ??
    std::byte secret{0b101010};  // 二進制魔法,像變魔術一樣 ?
    
    // 位運算大法 ??
    std::byte mask{0b111000};    // 這是我們的魔法面具
    auto result = secret & mask;  // 變身! ??
    
    // 揭秘時刻! ??
    std::cout << "解密結果:"
              << std::bitset<8>(std::to_integer<int>(result)) 
              << " ??\n";
}

這段代碼就像在玩魔術 ??:

  • 先準備一個神秘數字 ??
  • 用魔法面具(掩碼)來變形 ??
  • 最后揭曉神奇的結果 ?

就是這么簡單,就像變魔術一樣有趣! ??

玩轉數字轉換 ??

嘿!想把 std::byte 變成數字嗎?有兩個超酷的魔法咒語 ?:

std::byte magic_byte{42};  // 先來個神秘數字 ??

// 經典魔法 ??♂?
int num1 = std::to_integer<int>(magic_byte);  // 老牌法術,穩如泰山!

// 新式魔法 ?
int num2 = std::to_underlying(magic_byte);     // C++23出品,簡單粗暴!

就這么簡單!兩種方法都能把我們的字節小精靈變成普通數字 ??

  • to_integer 是老前輩,可靠又穩定 ??
  • to_underlying 是新秀,代碼更短,用起來更爽 ??

選哪個?看你心情!反正都能幫你完成任務 ??

位運算大魔法秀 ??

來看看 std::byte 的位運算絕活吧!就像變魔術一樣神奇 ?:

std::byte b{0b00001111};  // 我們的魔法師 ??

// 左移仙術 ??
b <<= 1;  // 嗖!數字們向左跑 ??♂?

// 右移神通 ??
b >>= 2;  // 唰!數字們向右溜 ??♀?

// 三大神器 ??
std::byte mask{0b11110000};  // 魔法面具準備!
b |= mask;  // 或運算:兩個數合體 ??
b &= mask;  // 與運算:雙劍合璧 ??
b ^= mask;  // 異或運算:完美變身 ??♂?

就這么簡單!每個運算都像個小魔術 ??,讓字節變來變去,超級好玩!記住:位運算就是 std::byte 的獨門絕技 ??!

實戰小案例:玩轉權限控制 ??

來看個超級實用的例子 - 用 std::byte 玩轉權限控制!就像在玩積木一樣簡單 ??

// 權限小精靈們 ??♂?
enumclass Permissions {
    None = 0,     // 啥也不能干 ??
    Read = 1,     // 可以偷看 ??
    Write = 2,    // 可以寫字 ??
    Execute = 4   // 可以跑起來 ??♂?
};

int main() {
    // 創建一個空權限盒子 ??
    std::byte permissions{0};
    
    // 往盒子里放入權限 ??
    permissions |= std::byte{static_cast<unsignedchar>(Permissions::Read)};   // 放入讀權限
    permissions |= std::byte{static_cast<unsignedchar>(Permissions::Write)};  // 放入寫權限
    
    // 偷偷看看有沒有讀權限 ??
    bool canRead = (permissions & std::byte{static_cast<unsignedchar>(Permissions::Read)}) != std::byte{0};
    std::cout << "能偷看嗎?" << (canRead ? "沒問題!??" : "不行哦~??") << "\n";
}

就是這么簡單! ??

  • 權限就像積木塊 ??
  • 用 |= 把權限放進盒子 ??
  • 用 & 來檢查權限是否存在 ??

一個字節八個位,就能存八種權限,超級省空間! ??

記住,std::byte 就像一個專業的雜技演員 - 它只做位運算這一件事,但是做得非常專業!這就是它的美,簡單而純粹 ?

字節數組操作 - 玩轉二進制數據 ??

來看看如何玩轉字節數組,就像在玩積木一樣簡單! ??

#include <cstddef>
#include <vector>

int main() {
    // 開一個神奇的百寶箱 ??
    std::vector<std::byte> buffer(4);  // 4個格子的魔法盒子
    
    // 放入寶物 ?
    buffer[0] = std::byte{0xFF};  // 第一格放個滿值 ??
    buffer[1] = std::byte{0x00};  // 第二格放個空值 ???
    
    // 檢查寶物 ??
    for(constauto& b : buffer) {
        std::cout << std::to_integer<int>(b) << " ";  // 一個一個數數 ??
    }
}

超簡單的三步走 ??:

  • 準備盒子 ??
  • 放入寶物 ??
  • 查看內容 ??

就這么簡單,字節數組就被你玩轉啦! ??

與其他類型的轉換 - 變形記 ??

來看看數據類型是如何華麗變身的! ?

#include <cstddef>
#include <cstring>

int main() {
    // 整數變身魔法 ??
    int number = 12345;                        // 原始數字 ??
    std::byte bytes[sizeof(int)];              // 準備魔法容器 ??
    std::memcpy(&bytes, &number, sizeof(int)); // 變身開始! ?
    
    // 變身回來 ??
    int restored;                              // 準備還原容器 ??
    std::memcpy(&restored, &bytes, sizeof(int)); // 還原魔法 ??
    
    // 見證奇跡的時刻 ??
    std::cout << "變身前: " << number << " ??\n"
              << "變身后: " << restored << " ??\n";
}

就這么簡單! ??

  • memcpy 就是我們的變身魔法棒 ??
  • 字節數組就像是數據的百變衣柜 ??
  • 想變就變,想換就換,超級方便! ??

記住:這種轉換就像變魔術一樣,要小心使用哦! ??

std::byte 使用秘笈 ??

來看看使用 std::byte 的超級小貼士! ??

(1) 初始化有講究 ??

std::byte good{42};     // 完美! 像個魔法師一樣優雅 ?
std::byte bad = 42;     // 糟糕! 編譯器會生氣的 ??

(2) 只能位運算哦 ??

std::byte b{0x42};
// b = b + 1;          // 不行!這不是計算器 ??♂?
b |= std::byte{0x01};  // 完美!位運算才是正道 ?

(3) 內存小把戲 ??

std::vector<std::byte> magic(1024);  // 開啟魔法空間 ??
std::fill(magic.begin(), magic.end(), std::byte{0});  // 施展清零術 ?

記住: std::byte 就像個純粹的武林高手 ??

  • 只專注位運算 ??
  • 拒絕算術運算 ??
  • 安全又可靠 ???

就是這么簡單! 一起來玩轉字節世界吧! ??

性能考慮 - 快得飛起 ??

嘿!擔心 std::byte 會拖慢你的程序嗎?放心啦!它輕得像片羽毛 ??

// 這兩行代碼就是最好的保證書 ??
static_assert(sizeof(std::byte) == 1, "std::byte 必須是1字節!");    // 大小剛剛好 ??
static_assert(alignof(std::byte) == 1, "std::byte 對齊要求必須是1!"); // 對齊完美 ?

簡單說就是:

  • 體積小:就一個字節,比螞蟻還小 ??
  • 零開銷:編譯器直接優化,快得像閃電 ?
  • 對齊穩:不會浪費一丁點內存 ??

所以,放心大膽地用吧!它就是性能小超人 ??♂?

總結 ??

std::byte 是現代 C++ 中處理原始字節數據的最佳選擇:

  • 類型安全 ?
  • 語義清晰 ?
  • 零開銷抽象 ?
  • 防止意外的算術運算 ?

記住:當需要處理原始字節時,std::byte 就是你的最佳拍檔! ??

責任編輯:趙寧寧 來源: everystep
相關推薦

2023-10-26 16:33:59

float 布局前段CSS

2025-05-19 04:00:00

2020-12-02 11:18:50

print調試代碼Python

2020-12-04 10:05:00

Pythonprint代碼

2021-06-09 06:41:11

OFFSETLIMIT分頁

2021-05-21 13:10:17

kill -9微服務Java

2020-12-15 08:06:45

waitnotifyCondition

2021-01-29 11:05:50

PrintPython代碼

2020-12-03 09:05:38

SQL代碼方案

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2020-07-17 07:15:38

數據庫ID代碼

2022-01-27 07:48:37

虛擬項目Django

2024-06-12 13:54:37

編程語言字符串代碼

2019-03-12 14:48:29

路由器XBOXPS4

2022-10-27 21:34:28

數據庫機器學習架構

2022-03-10 10:12:04

自動化腳本Bash

2025-05-15 03:00:00

2023-09-08 08:35:42

層疊樣式表CSS

2023-06-26 08:20:02

openapi格式注解

2025-01-10 06:30:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天天天操 | 欧美日韩亚洲一区 | 国产东北一级毛片 | 国产成人综合一区二区三区 | 欧美午夜在线 | 9porny九色视频自拍 | 国产在线视频在线观看 | 成人网在线 | 国产黄色av网站 | www.国产一区 | av网站免费观看 | 久久久久国产一区二区三区 | 久久久国产一区 | 成人福利网站 | 九九视频在线观看 | 亚洲成人福利在线观看 | 欧美黑人狂野猛交老妇 | 亚洲成人网在线播放 | 一区二区三区欧美 | 国产精品一区视频 | 一区二区av在线 | 在线观看免费高清av | 欧美综合国产精品久久丁香 | av一二三区 | 一本一道久久a久久精品蜜桃 | 日韩在线观看一区 | 三级在线免费 | 青青久在线视频 | 日本免费一区二区三区 | 成年人在线观看视频 | 一区二区三区在线播放 | 在线观看视频一区 | 久久丝袜 | 男女视频91 | 久久久久国产精品一区二区 | 欧美日韩久久精品 | 欧美三级在线 | 亚洲性视频网站 | 永久精品| 狠狠色综合网站久久久久久久 | 凹凸日日摸日日碰夜夜 |