のような文字列が 1 つあり"01030920316"
ます。この文字列をロングに変換してからバイトに変換すると、Javaの出力の下に表示されます
output in java : Tag in bytes : 0, 0, 0, 0, 61, 114, -104, 124
この出力を取得したときにCで行うのと同じこと
output in C : Tag in bytes : 124,152,114,61,0,0,0,0
-104 and 152
ここで、符号付きと符号なしの違いを理解していますが、最初は Java で、最後は C で 0 になるのはなぜですか。この動作のために、このバイトが検証のために C プログラム側に送られるときに問題が発生します。
問題が発生する場所を教えてください。
Java プログラム :
final byte[] tagBytes = ByteBuffer.allocate(8)
.putLong(Long.parseLong("01030920316")).array();
System.out.println("Tag in bytes >> " + Arrays.toString(tagBytes));
C プログラム :
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
/** To access long long values as a byte array*/
typedef union uInt64ToByte__
{
uint64_t m_Value;
unsigned char m_ByteArray[8];
}uInt64ToByte;
int main()
{
uInt64ToByte longLongToByteArrayUnion;
longLongToByteArrayUnion.m_Value = atoll("01030920316");
printf("%d,%d,%d,%d,%d,%d,%d,%d",longLongToByteArrayUnion.m_ByteArray[0],longLongToByteArrayUnion.m_ByteArray[1],longLongToByteArrayUnion.m_ByteArray[2],longLongToByteArrayUnion.m_ByteArray[3],longLongToByteArrayUnion.m_ByteArray[4],longLongToByteArrayUnion.m_ByteArray[5],longLongToByteArrayUnion.m_ByteArray[6],longLongToByteArrayUnion.m_ByteArray[7]);
return 0;
}