I’m implementing a function in C where I convert a byte[] to an int[]. The problem is that the length of the int[] depends on the contents of the byte[] (not just the length of the byte[]) so I won’t know the total length of the int[] until I’ve iterated the entire byte[]. I’m therefore looking for some form av int-stream or dynamically increasing int-list which I can write to and then convert to a int[] once I’m done writing all the ints. My C-experience is a bit limited at the moment so I’m not really sure what’s considered best practice to solve this kind of problem. Any suggestions?
Share
There are a few ways of doing this I can think of.
I’m assuming, based on your question, that the transformation of your
char[]to the correspondingint[]s is expensive (which is why you want to avoid performing that calculation twice – once to determine the size, and again to populate the contents.So, here’s how I would go about it:
First, is there a maximum size you can associate to the transformation? EX: Is there a maximum 2-to-1 size difference? (For each char in the char[] can it create “up to X” ints?)
If this is the case, and memory usage isn’t an issue (you’re not super constrained) – Go ahead and alloc the maximum size, populate it as you perform your translation, and realloc when you’re done to shrink your memory footprint.
If this is not the case, you’re in tougher waters, and should look to non-contiguous schemes – such as a linked list. Once you’ve performed your translation and built your linked list, you can then allocate space for your array, and visit each element in the linked list to populate the array.