C++ c++;将QWORD十六进制拆分为更小的变量

C++ c++;将QWORD十六进制拆分为更小的变量,c++,C++,我有一个无符号的long long,我想把它分成更小的字节。 e、 g 我想把它分成以下几个字符。 字符TEST2等于0x46,TEST3等于0x59,TEST4等于0x58,依此类推。我该怎么做呢?使用指针就可以了 template <typename T> std::vector<uint8_t> iterateOverBytes(const T& var) { std::vector<uint8_t> toReturn; for

我有一个无符号的long long,我想把它分成更小的字节。 e、 g

我想把它分成以下几个字符。
字符TEST2等于0x46,TEST3等于0x59,TEST4等于0x58,依此类推。我该怎么做呢?

使用指针就可以了

template <typename T>
std::vector<uint8_t> iterateOverBytes(const T& var) {
    std::vector<uint8_t> toReturn;

    for(auto i = 0u; i < sizeof(var); ++i) {
        toReturn.push_back(reinterpret_cast<const uint8_t*>(&var)[i]);
    }

    return toReturn;
}

一个完全不需要强制转换的解决方案怎么样?(


使用重铸指针读取整数值的每个字节是不可移植的,因为系统可以采用不同的方式对组成整数值的组件字节进行排序。大端系统将最重要的字节放在内存的第一位,而小端系统则以最低阶字节开始

要方便地处理此问题,请使用位移位运算符将所需字节置于派生整数值的最低顺序位置,然后将结果转换为字节大小的整数类型(如
uint8\t

#包括
#包括
#包括
#包括
int main(){
常量无符号长字=0x465958432E1F0199ull;
//扫描所有字节,将每个字节添加到一个向量
//最高有效字节优先
std::向量字节;
对于(自动i=sizeof(word)-1;i+1;--i){
const auto b=静态_cast(word>>i*8);
字节。推回(b);
}
//将字节向量转储为2位十六进制值

std::cout将其内存地址强制转换为
uint_8*
?您是否询问掩码和移位?例如
(测试>>4)&0xFF;
将为您提供
0x19
。因此您的
TEST2
将是
(测试>>56)&0xFF;
template <typename T>
std::vector<uint8_t> iterateOverBytes(const T& var) {
    std::vector<uint8_t> toReturn;

    for(auto i = 0u; i < sizeof(var); ++i) {
        toReturn.push_back(reinterpret_cast<const uint8_t*>(&var)[i]);
    }

    return toReturn;
}
for(const auto& byte: iterateOverBytes(TEST)) {
    std::cout << std::hex << int(byte) << std::endl;
}
unsigned long long TEST = 0x465958432E1F0199;
uint8_t elements[sizeof(TEST)];
memcpy(elements, &test, sizeof(elements));
#include <iostream>
#include <iomanip>
#include <vector>
#include <cstdint>

int main() {
    const unsigned long long word = 0x465958432E1F0199ull;
    // scan through all bytes, adding each one to a vector
    // most significant byte first
    std::vector<std::uint8_t> bytes;
    for(auto i=sizeof(word)-1; i+1; --i) {
        const auto b = static_cast<std::uint8_t>(word >> i*8);
        bytes.push_back(b);
    }
    // Dump vector of bytes as 2-digit hex values
    std::cout << std::hex << std::setfill('0');
    for(auto b : bytes) {
        std::cout << std::setw(2) << static_cast<unsigned>(b) << ' ';
    }
    std::cout << '\n';
}