C++ 如何将SHA1转换为无符号长整数的数组[5]?
为了使用库/子系统,我必须将SHA1(使用例如opensll计算)转换为无符号长整数(32位变量)的5元素数组,或者自己创建上述SHA1-5-long-array 原因:C++ 如何将SHA1转换为无符号长整数的数组[5]?,c++,arrays,converter,sha1,unsigned-integer,C++,Arrays,Converter,Sha1,Unsigned Integer,为了使用库/子系统,我必须将SHA1(使用例如opensll计算)转换为无符号长整数(32位变量)的5元素数组,或者自己创建上述SHA1-5-long-array 原因: SHA1(160位)=5 x无符号长整数(32位) 我认为第一个解决方案会更好,所以我的问题是:我应该如何完成这项任务?逐字节/位读取字节/位,然后从中创建无符号长整数并将其放入数组中,或者是否有其他解决方案?SHA1生成一个20字节的哈希值。在openssl中,它返回一个无符号字符*。我猜您可以使用无符号字符[20]和uin
SHA1(160位)=5 x无符号长整数(32位)
我认为第一个解决方案会更好,所以我的问题是:我应该如何完成这项任务?逐字节/位读取字节/位,然后从中创建无符号长整数并将其放入数组中,或者是否有其他解决方案?SHA1生成一个20字节的哈希值。在openssl中,它返回一个
无符号字符*
。我猜您可以使用无符号字符[20]
和uint32\u t[5]
的并集
,并使用字符方便字节访问:
union mysha1{
uint32_t shaint[5];
unsigned char shachar[20];
};
再加上一堆操作符(比如索引),你就可以开始了
如果你想保持它的粗糙和简单,你可以在SHA1输出和你的uint32\t[5]之间做一个
memcpy
。谢谢这对我有用:)也许其他人会想出竞争的解决方案。另一个解决方案是“重新解释投射”,但我很确定它会打破严格的别名。