gpt4 book ai didi

c++ - 如何在基数 256 中以其唯一的 xLen 数字表示形式写入整数 x?

转载 作者:行者123 更新时间:2023-11-28 04:11:40 25 4
gpt4 key购买 nike

我想将密码转换为长度为 256 的 xLen 密码(密码是 mpz_class 的一个实例)。为此,我使用以下代码:

 //Write the integer x in its unique xLen-digit representation in base 256
string str;
str=cypher.get_str(256);

//Print string figure by figure separated by space
for(int i=0;i<(int)str.length();i++){
if(i%256==0)
cout<<" "<<str[i];
else
cout<<str[i];
}

不幸的是,我收到了

terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_M_construct null not valid Aborted (core dumped)

我坚信这是因为 str=cypher.get_str(256) 因为将基数更改为 10 不会返回任何错误。

我将非常感谢您提出如何替换该 block 的想法。谢谢!

最佳答案

没有以 base 256 表示的 ASCII 表示形式。Base 256 意味着每个数字包含 256 个值。由于数字存储为字符,因此每个字符必须至少有 256 个可打印值。由于 ASCII 仅包含 95 个可打印值(即没有控制字符,如退格键或铃铛),任何超过该值的值肯定不会被接受。你可以用例如Unicode,但您会错过基本编码的要点。

如果有人写 base 256,它可能只是意味着它应该以字节为单位存储、编码或引用,因为每个字节都有 256 个值。但是,您仍然必须决定整数是否应该存储在(二补)有符号编码或无符号编码中。此外,必须决定它是需要存储在 big endian(网络顺序,最高位/字节在左边)还是 x86 兼容 CPU 上使用的 little endian 顺序。


不幸的是,mpz_export 函数的页面非常不清楚。当然,大十进制在内部用作 32 位或 - 现在更有可能 - 64 位字。然而,这个事实通过这个函数暴露出来,它似乎只能以字大小的倍数写入值,所以 4 或 8 个字节,将不必要的字节设置为 0 值。这是不必要的麻烦。

然而,如评论中所述,您应该使用此函数将数字转换为二进制表示形式。

关于c++ - 如何在基数 256 中以其唯一的 xLen 数字表示形式写入整数 x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57648989/

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