gpt4 book ai didi

c++ - 将 uint64_t 转换为 unsigned char serialized[8]

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:25 29 4
gpt4 key购买 nike

我正在尝试将 uint64_t 值转换为 unsigned char 数组。目前我的函数正在使用 uint32_t。但是,一旦我尝试转换 64 位值,结果就不同了。

有人看错了吗?

#include <iostream>
#include <inttypes.h>

using namespace std;

void serialize_uint64(const uint64_t integer, unsigned char * const serializedInteger);
uint64_t deserialize_uint64(unsigned char * const serializedInteger);

int main (int argc, char *argv[])
{
uint64_t test64 = 0xFF/*FFFFFFFFFFFFFF;*/;

unsigned char serialized64[8];
memset(serialized64, 0x00, sizeof(serialized64));

serialize_uint64(test64, serialized64);

printf("%llu = %llu\n", test64, deserialize_uint64(serialized64));

return 0;
}

void serialize_uint64(const uint64_t integer, unsigned char * const serializedInteger)
{
serializedInteger[0] = integer >> 56;
serializedInteger[1] = integer >> 48;
serializedInteger[2] = integer >> 40;
serializedInteger[3] = integer >> 32;
serializedInteger[4] = integer >> 24;
serializedInteger[5] = integer >> 16;
serializedInteger[6] = integer >> 8;
serializedInteger[7] = integer;
}

uint64_t deserialize_uint64(unsigned char * const serializedInteger)
{
uint64_t converted = 0;

converted = (converted << 8) | serializedInteger[0];
converted = (converted << 8) | serializedInteger[1];
converted = (converted << 8) | serializedInteger[2];
converted = (converted << 8) | serializedInteger[3];
converted = (converted << 8) | serializedInteger[4];
converted = (converted << 8) | serializedInteger[5];
converted = (converted << 8) | serializedInteger[6];
converted = (converted << 8) | serializedInteger[7];
converted = (converted << 8) | serializedInteger[8];

return converted; // 4294967295
}

最佳答案

你有一个 off-by-one error ,你解码 9 个字节。这:

converted = (converted << 8) | serializedInteger[8];

不应该在那里。请注意索引是 8,即它访问了不存在的第 9 个字节。

关于c++ - 将 uint64_t 转换为 unsigned char serialized[8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770060/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com