[ad_1]
I do not use Java, but I will try to explain what is happening.
The value 8188 is 0x1ff8 in big-endian hex. When your program is run the result is actually 8188 - 65536 = -57348. That is why you got the result you did.
Because the input is big-endian binary, only the first bit of b[0] should be checked for a sign. What I did in C# was,
public static String GetBinary(byte[] b, int decimalPointLocation)
{
long val = 0;
if ((b[0] & 0x80) != 0)
{
val = -1;
}
for (int i = 0; i < b.Length; i++)
{
val = (val << 8) + b[i];
}
string s = Convert.ToString(val);
return s;
}
For byte[] b = {0x1f, 0xfc} the value returned is 8188. For byte[] b = {0xe0, 0x04} the value returned is -8188.
While I did use similar substring manipulation to insert a decimal point for those values, you need to be aware that absolute integer values less than 100 cannot be properly formatted for two decimal places with that method.
[ad_2]
solved Need Java Code/Logic to extract COMP. field from EBCDIC file