I have a unsigned int[16] array that when printed out looks like this:
4418703544ED3F688AC208F53343AA59
The code used to print it out is this:
for (i = 0; i < 16; i++)
printf("%X", CipherBlock[i] / 16), printf("%X",CipherBlock[i] % 16);
printf("\n");
I need to pass this unsigned int array "CipherBlock" into a decrypt() method that only takes unsigned char *. How do correctly memcpy everything from the "CipherBlock" array into an unsigned char array without losing information?
My understanding is an unsigned int is 4 bytes and unsigned char 1 byte. Since "CipherBlock" is 16 unsigned integers, the total size in bytes = 16 * 4 = 64 bytes. Does this mean my unsigned char[] array needs to be 64 in length?
If so, would the following work?
unsigned char arr[64] = { '\0' };
memcpy(arr,CipherBlock,64);
This does not seem to work. For some reason it only copies the the first byte of "CipherBlock" into "arr". The rest of "arr" is '\0' thereafter.
CipherBlock[i]matter, so they are not arbitrary ints (or their 24 highest bits don't matter to you). - Basile Starynkevitchdecryptfunction specified to accept arbitrary zero terminated strings, or can it only accept hex string (with hex digit in ASCII)? - Basile Starynkevitchunsigned char*? (See my answer for speculations.) - aibunsigned intvalues as a number ofunsigned charvalues, and it's not possible to tell from the question which one you want. For example, you don't say whether you want the firstunsigned charinarrto represent the most significant 8 bits of the firstunsigned int, or the least significant 8 bits, or something else. It rather depends how the CipherBlock was generated and transmitted to you in the first place. - Steve Jessopmemcpywith a last argument of 64 only copies one byte -- on the face of it this is impossible, there must be some bug in the code you've left out. - Steve Jessop