c# - 在 C++ 中将 int 转换为 little-endian 格式的字节以用于 Azure 中的 blobId

标签 c# c++ qt qbytearray

使用 Azure (http://msdn.microsoft.com/en-us/library/dd135726.aspx) 的 base64 编码,我似乎不知道如何取回所需的字符串。我可以在 C# 中执行以下操作。

int blockId = 5000;
var blockIdBytes = BitConverter.GetBytes(blockId);
Console.WriteLine(blockIdBytes);
string blockIdBase64 = Convert.ToBase64String(blockIdBytes);
Console.WriteLine(blockIdBase64);

打印出来(在 LINQPad 中):

Byte[] (4 items)
| 136         |
| 19          |
| 0           |
| 0           |

iBMAAA==

在 Qt/C++ 中,我尝试了几个 aporaches,它们都返回了错误的值。

const int a = 5000;
QByteArray b;

for(int i = 0; i != sizeof(a); ++i) {
  b.append((char)(a&(0xFF << i) >>i));
}

qDebug() << b.toBase64(); // "iIiIiA==" 
qDebug() << QByteArray::number(a).toBase64(); // "NTAwMA=="
qDebug() << QString::number(a).toUtf8().toBase64(); // "NTAwMA=="

如何获得与 C# 版本相同的结果?

最佳答案

请参阅我对您的 for 循环问题的评论。它每次移动多一位,但实际上它应该是 8 位。就个人而言,我更喜欢这个而不是循环:

    b.append(static_cast<char>(a >> 24)); 
    b.append(static_cast<char>((a >> 16) & 0xff)); 
    b.append(static_cast<char>((a >> 8) & 0xff)); 
    b.append(static_cast<char>(a & 0xff)); 

以上代码适用于网络标准字节顺序(大端)。将四个操作的顺序从后到前翻转为小端字节序。

关于c# - 在 C++ 中将 int 转换为 little-endian 格式的字节以用于 Azure 中的 blobId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10203105/

相关文章:

c# - HttpClient 超时似乎不起作用

c++ - 将 std::conditional 与不可转换类型一起使用(原始与指针)

c++ - 为什么在适用时不隐含 constexpr?

c# - 在WinForms菜单中是否有批量更新的方法

c# - 使用视觉状态时 GroupBox 标题背景不更新

c# - 设计指定构造函数

c++ - 我怎样才能在qt中获得当前关注的QLineEdit?

c++ - 设置自定义图标

qt - 无法使 urlChanged 信号工作

c++ - 增加Qt中文本和复选框之间的空间