如何在C ++中将64位整数转换为大端字节数组

汤玛士

(这是在SHA256中填充消息的后续问题。)

(我正在尝试在C ++中实现SHA-256哈希函数。我这样做纯粹是出于娱乐和学习目的。)

我的绳子message长了message_length余与位已所附字符串1随后0S以便串的长度是现在448位模512个比特。

现在,我需要在字符串后附加带有message_length64位大端整数的字符串,但是我不太清楚如何在C ++中执行此操作。

那么为了论证,可以说message_length是3个字节= 24位。十六进制的24是18,因此我需要附加00 00 00 00 00 00 00 18到字符串中。

所以我想要的是一个将整数3转换为字符串的函数,00 00 00 00 00 00 00 18以便我可以附加它。

我的问题归结为

如何在C ++中将64位整数转换为大端字节数组

英仙座

编辑:我只是重新阅读了您的问题(打算对其进行编辑)。我认为您误解了SHA256希望您使用的格式。无需附加00 00 00 00 00 00 00 18消息长度为24的字符串(每个字节用十六进制编码并用空格分隔),而是需要附加原始字节0x00、0x00、0x00、0x00、0x00、0x00、0x00和0x18。它们不代表任何可打印的字符。有关获取这些字节的方法,请参见下文。我的示例使用一个整数,其字节表示恰好仅包含可打印字符(ASCII)。

顺便说一句,填充到448位的原因是,在512位的完整块大小中还剩下64位,因此可以在其中放入消息长度的大端编码。


您可以使用提取单个字节,num使用num>>(8*i) & 0xff将获得的最低有效字节i=0和无符号长整数(64位)的最高有效字节i=7遍历所有位置,您可以获得每个字节:

   unsigned long num = 0x626967656e646961L;
   //Store big endian representation in a vector:
   std::vector<unsigned char> bigEndian;
   for(int i=7; i>=0; i--){
      bigEndian.push_back( (num>>(8*i)) & 0xff );
   }

如果需要将其作为字符串,则可以使用字符串的迭代器构造函数将其转换:

   std::string bigEndianString(bigEndian.begin(),bigEndian.end());

带有测试输出的完整代码:

#include <iostream>
#include <string>
#include <vector>
int main() {
   unsigned long num = 0x626967656e646961L;

   //Store big endian representation in a vector:
   std::vector<unsigned char> bigEndian;
   for(int i=7; i>=0; i--){
      bigEndian.push_back( (num>>(8*i)) & 0xff );
   }

   //Convert vector to string:
   std::string bigEndianString(bigEndian.begin(),bigEndian.end());

   //Test correctness:
   for(std::vector<unsigned char>::const_iterator it = bigEndian.begin(); it != bigEndian.end(); ++it) {
       std::cout << std::hex << (int)*it << ' ';
   }
   std::cout << std::endl << bigEndianString << std::endl;

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中将整数值转换为'n'位数字ascii字节数组

来自分类Dev

如何在Java中将整数值转换为'n'位数字ascii字节数组

来自分类Dev

如何在go中将int64转换为字节数组?

来自分类Dev

如何在Perl中将字节数组转换为int64

来自分类Dev

在C ++中将字节数组转换为unsigned long

来自分类Dev

如何在C ++中将浮点数组转换为字节数组(Arduino)

来自分类Dev

如何在c#中将浮点数组转换为字节数组?

来自分类Dev

如何在Java中将字符串转换为32位对齐的字节数组?

来自分类Dev

如何在C#中将字节数组的子范围转换为字符串

来自分类Dev

如何在C#中将字节数组转换为图像?

来自分类Dev

如何在JNI中将Java字节数组的内容转换为C字符串?

来自分类Dev

如何在C#中将字节数组的子范围转换为字符串

来自分类Dev

如何在Objective-c中将short转换为字节数组?

来自分类Dev

如何在C#中将字节数组转换为zip存档?

来自分类Dev

如何在Rust中将字节数组转换为原始类型?

来自分类Dev

如何在python中将字节数组转换为double?

来自分类Dev

如何在Java中将字节数组转换为String?

来自分类Dev

如何在Linq输出列表中将字节数组转换为图像

来自分类Dev

如何在Mule ESB中将文件转换为字节数组?

来自分类Dev

如何在Go中将unicode字节数组转换为普通字符串

来自分类Dev

如何在Java中将图像的光栅字节数组转换为原始图像?

来自分类Dev

如何在Java中将字节数组转换为Mat对象

来自分类Dev

如何在uwp平台中将图像转换为字节数组

来自分类Dev

如何在NAudio中将字节数组转换为WaveStream?

来自分类Dev

如何在python中将字节数组转换为图像

来自分类Dev

如何在Swift中将ContiguousArray的Floats转换为字节数组?

来自分类Dev

如何在m子中将字节数组转换为多部分文件

来自分类Dev

如何在Kotlin中将对象转换为字节数组

来自分类Dev

如何在Perl中将图像或文本文件转换为字节数组?

Related 相关文章

  1. 1

    如何在Java中将整数值转换为'n'位数字ascii字节数组

  2. 2

    如何在Java中将整数值转换为'n'位数字ascii字节数组

  3. 3

    如何在go中将int64转换为字节数组?

  4. 4

    如何在Perl中将字节数组转换为int64

  5. 5

    在C ++中将字节数组转换为unsigned long

  6. 6

    如何在C ++中将浮点数组转换为字节数组(Arduino)

  7. 7

    如何在c#中将浮点数组转换为字节数组?

  8. 8

    如何在Java中将字符串转换为32位对齐的字节数组?

  9. 9

    如何在C#中将字节数组的子范围转换为字符串

  10. 10

    如何在C#中将字节数组转换为图像?

  11. 11

    如何在JNI中将Java字节数组的内容转换为C字符串?

  12. 12

    如何在C#中将字节数组的子范围转换为字符串

  13. 13

    如何在Objective-c中将short转换为字节数组?

  14. 14

    如何在C#中将字节数组转换为zip存档?

  15. 15

    如何在Rust中将字节数组转换为原始类型?

  16. 16

    如何在python中将字节数组转换为double?

  17. 17

    如何在Java中将字节数组转换为String?

  18. 18

    如何在Linq输出列表中将字节数组转换为图像

  19. 19

    如何在Mule ESB中将文件转换为字节数组?

  20. 20

    如何在Go中将unicode字节数组转换为普通字符串

  21. 21

    如何在Java中将图像的光栅字节数组转换为原始图像?

  22. 22

    如何在Java中将字节数组转换为Mat对象

  23. 23

    如何在uwp平台中将图像转换为字节数组

  24. 24

    如何在NAudio中将字节数组转换为WaveStream?

  25. 25

    如何在python中将字节数组转换为图像

  26. 26

    如何在Swift中将ContiguousArray的Floats转换为字节数组?

  27. 27

    如何在m子中将字节数组转换为多部分文件

  28. 28

    如何在Kotlin中将对象转换为字节数组

  29. 29

    如何在Perl中将图像或文本文件转换为字节数组?

热门标签

归档