• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Converting C# code in JAVA / datatype problem

 
Greenhorn
Posts: 21
Eclipse IDE Tomcat Server Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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!!!
 
Bartender
Posts: 4179
22
IntelliJ IDE Python Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

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.
 
Roshan Wankhade
Greenhorn
Posts: 21
Eclipse IDE Tomcat Server Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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.
 
Consider Paul's rocket mass heater.
reply
    Bookmark Topic Watch Topic
  • New Topic