我有一个像"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;
}