Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

taybrin

int[] to byte[]

This topic is 6012 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

In Java, if i have an integer array and a method takes a byte array, is there any way I can convert the integer array to the byte array, short of going through and shifting bits around. I tried casting, but that did not seem to work . . . Thanks

Share this post


Link to post
Share on other sites
Advertisement
i dont imaging there is one... if an integer, 4 bytes, uses each of those bytes, there is no way to convert it to a char (1 byte), without loosing much data (3 bytes worth).

why would you want to do this?

Share this post


Link to post
Share on other sites
DatagramPackets take byte[] as data. I have data that is in int[] . . . So I figured there would be a function somewhere that coverted the first integer in the int[] to take up the first 4 spaces of the byte array and so on. In C this would not be such a problem i suppose . . .

Share this post


Link to post
Share on other sites
  
size_t arraySize = 1024;
int* myIntArray = new int[arraySize];
char* myCharBuffer = (char*)myIntArray;
size_t numberOfBytesInBuffer = arraySize * sizeof(int);

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
maybe make a func like this

public byte[] getBytesFromIntArray(int[] data)
{
byte newData = new byte[4 * data.length];

for (int i = 0;i < data.length; i++)
for (int j = 0; j < 4; j++)
newData[i * 4 + j] = (data &
(Math.pow(2,(j+1) * 8)) - (Math.pow(2, j * 8)));
return newData;
}


Share this post


Link to post
Share on other sites
No Java guru, but I have an idea.

To get least significant byte, take the modulo (assuming there''s a modulo operator/function in Java) of the integer and 256.

I C, that is
  
int var;
char b0 = var % 256;


Then, to get next byte, divide by 256, and take the modulo again. And for the third and fourth byte, divide by 256*256 and 256*256*256 repectively, and take the modulo of it.
  
char b1 = (var / 256) % 256;
char b2 = (var / 65536) % 256;
char b3 = (var / 16777216) % 256;

Share this post


Link to post
Share on other sites
There is an easy way, I do this in VB all the time.

Firstly, it makes things a lot simpler if the integer and byte are unsigned. Then:

b3 b2 b1 b0

(bx = byte x)

Mask out b2, b1, b0. Bitshift right 24. This is Byte[0]
Mask out b3, b1, b0. Bitshift right 16. This is Byte[1]
Mask out b3, b2, b0. Bitshift right 8. This is Byte[2]
Mask out b3, b2, b1. This is Byte[3]



Trying is the first step towards failure.

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!