私はバイト配列にintを変換しようとしていますし、Azure Rest APIのblockIdを作成するためにbase64を行います。バイト配列とintに大きい数値で同じ値を与える
int a = 127;
int b = 4000;
C#の:私はbase64文字列にint型に変換するところとき、私は、正しい最初のビットを得ている=
byte[] blockIdBytes = BitConverter.GetBytes(a);
string blockIdBase64 = Convert.ToBase64String(blockIdBytes);
a
は "fwAAAA ==" を与えるとb
は」oA8AAAを与えます= fwAAAを "
C++
QByteArray temp;
for(int i = 0; i < sizeof(a); i++) {
temp.append((char)(a >> (i * 8)));
}
a
ができます" A == "となり、b
は" oA8AAA == "を返します(これは正しい値です)
ここで、base64文字列をintに変換しようとすると問題が発生しますか?私のbytearrayからintメソッドは127より大きい数値では機能しません、なぜですか?
127が動作しますが、128(たとえば)の場合、結果は「-128」になります。私はそれが溢れていることを知っていますが、なぜそしてどこですか?
EDIT:
が試み:
QByteArray temp;
int a = 340;
for(int i = 0; i < sizeof(a); i++) {
temp.append((unsigned char)(a >> (i * 8)));
}
をactaully "340" を与え、私は戻ってそれを変換する場合、 "255" は "-1" 与え、 "256" は "256"
"temp"に追加するときに符号付き文字としてキャストしているためです。バイトは、UNSIGNED charと等価です。 (int i = 0; i>())の代わりに、符号付きchar(範囲-127〜127) i * 8)))); } –
でも変更しても同じ問題が発生する – chikuba
temp.size()から0にループする2番目の最後のコードブロックでは、どのようにtemp.sizeの位置を参照解除することができますか()?配列のサイズが8の場合、temp [7]は配列の最後の要素ですか、いいえ? – ds1848