aspose file tools*
The moose likes Beginning Java and the fly likes Converting C# code in JAVA / datatype problem Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Converting C# code in JAVA / datatype problem " Watch "Converting C# code in JAVA / datatype problem " New topic
Author

Converting C# code in JAVA / datatype problem

Roshan Wankhade
Greenhorn

Joined: Dec 07, 2011
Posts: 21

Converting C# code in JAVA / datatype problem

In c# byte range is 0 to 255 and in JAVA -128 to 127.

Now I have C# byte array as {15, 0, 0, 128, 16, 39, 240, 216, 241, 255, 127}.


now First take C# scenario, they have two methods....

1. BitConverter.ToInt16(byteArray, index); // In C# Int16 is short range: -32768 to 32767
This method consider two bytes from index positions and convert them to short(Int16).
e.g. byteArray = {15, 0, 0, 128, 16, 39, 240, 216, 241, 255, 127} and index = 6.
then two bytes will be 240, 216. By using this two bytes it creates one short(Int16) which is -10000.

2. BitConverter.ToInt32(byteArray, index); // In C# Int32 is int range: -2147483648 to 2147483647
This method consider four bytes from index positions and convert them to int(Int32).
e.g. byteArray = {15, 0, 0, 128, 16, 39, 240, 216, 241, 255, 127} and index = 6.
then four bytes will be 240, 216, 241, 255. By using this four bytes it creates one int(Int32) which is -927504.



Now In JAVA

As java byte range is -128 to 127 we have to use short array to store same data.
i took {15, 0, 0, 128, 16, 39, 240, 216, 241, 255, 127} as short Array.
converted it to byteArray = {0, 15, 0, 0, 0, 0, 0, -128, 0, 16, 0, 39, 0, -16, 0, -40, 0, -15, 0, -1, 0, 127}

1. to get short (range: -32768 to 32767)
i took index = 6*2 = 12
so the byte i have to consider are 0, -16, 0, -40.
and have to make one short from it but these are 4 bytes, How can i make short from it!!! so i took resulting number as int which is of 4 byte length.
Now problem is int range in java is -2147483648 to 2147483647, so while making the number from those byte array its not giving same result as C#

2. to get int (range: -2147483648 to 2147483647)
i took index = 6*2 = 12
so the byte i have to consider are 0, -16, 0, -40, 0, -15, 0, -1.
and have to make one int from it but these are 8 bytes, How can i make int from it? same problem above now for int, so i consider resulting number as long.
Same now, the java long range (-9223372036854775808 to +9223372036854775807) is different than C# int range(-2147483648 to 2147483647).
So the resulting number getting from byte array is not same as the C# output.
I used,



like wise i have tried in different way... also succeed in getting short, int and long number but the values, i.e. my output is not same as C#

Please help me some suggestions, i'm totally stuck!!!
Steve Luke
Bartender

Joined: Jan 28, 2003
Posts: 4181
    
  21

Roshan Wankhade wrote:[As java byte range is -128 to 127 we have to use short array to store same data.

No, you don't. You should still store the values as bytes. Your bit converter cares only about the bits as data, not the value. The bits for the byte -1 is the same as the (bottom 8) bits for short 255 (and for the byte -128 and short 128). You need these bits to be correct to build the shorts and ints, not the original byte values. So you should not convert the bytes to shorts.

You might also choose to use a ByteBuffer. You can put the raw bytes into that, convert to the corresponding data type buffer (ShortBuffer, IntBuffer, LongBuffer, etc...) and then pull the values out. This would also help you fix the endian-ness of the data if you need to.

It has been my experience when converting code from one language to another to not attempt a line-by-line or expression-by-expression conversion. Rather, you need to be able to read the constructs in source language and understand its intent. Then find the appriate means of executing that intent in the target language. This generally makes better code and fewer work-arounds and bugs as you try to implement things that just don't translate.


Steve
Roshan Wankhade
Greenhorn

Joined: Dec 07, 2011
Posts: 21

Thanks Steve.
I took it as the byte array and perform the operation to get the short and int from this array....
and Now i'm getting what i expected from my code i.e. the same number what i got in c#.
Thanks for great help...
You made my day.
 
 
subject: Converting C# code in JAVA / datatype problem