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==" を与え、"oA8AAA==" をb
与える
C++
QByteArray temp;
for(int i = 0; i < sizeof(a); i++) {
temp.append((char)(a >> (i * 8)));
}
a
"fwAAAA==" をb
与え、"oA8AAA==" を与えます (上記と同じ値で、正しいです)
問題は、base64-string を 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」になります。