我正在尝试将 int 转换为字节数组,然后执行 base64 为 Azure Rest API 创建一个 blockId。当我将 int 转换为 base64 字符串时,我得到了第一位正确的:
int a = 127;
int b = 4000;
C#:
byte[] blockIdBytes = BitConverter.GetBytes(a);
string blockIdBase64 = Convert.ToBase64String(blockIdBytes);
a
给出“fwAAAA==”并b
给出“oA8AAA==”
C++
QByteArray temp;
for(int i = 0; i < sizeof(a); i++) {
temp.append((char)(a >> (i * 8)));
}
a
给出“fwAAAA==”并b
给出“oA8AAA==”(与上面的值相同,这是正确的)
现在的问题是,当我尝试将 base64 字符串转换回 int 时?我的 bytearray 到 int 方法不适用于大于 127 的数字,为什么?
int result = 0;
for(int i = temp.size(); i >= 0; i--) {
result = (result << 8) + temp[i];
}
127 有效,但是当我执行 128(例如)时,结果是“-128”。我意识到它溢出了,但是为什么以及在哪里?
编辑:
试过:
QByteArray temp;
int a = 340;
for(int i = 0; i < sizeof(a); i++) {
temp.append((unsigned char)(a >> (i * 8)));
}
当我将其转换回来时,它实际上给出“340”,“255”给出“-1”,“256”给出“256”