# Converting arrarys in Python to arrays in C

Simon Foster simon at uggs.demon.co.uk
Wed Dec 17 15:41:24 CET 2003

```I have some code which attempts to convert Python arrays (tuples of
tuples of tuples...) etc. into C arrays with equivalent contents.

The prototype code is shown below.

My only question is, is there some way of doing this without repeating
the try..except blocks ad-infinitum to handle 3D, 4D arrays etc.

I can see there is a pattern here but I can't seem to turn it into a
loop.  Would a recursive solution do the trick?

cdata0 = 0

cdata1 = ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 )

cdata2 = (( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ),
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ))

if __name__ == '__main__':

import sys
sys.stdout = file( 'cdata.log', 'w' )

def arrayLine( s ):
return ', '.join( [ '0x%04X' % t  for t in s ] )

def array0D( data ):
print 'unsigned char = 0x%04X;' % data

def array1D( data ):
print 'unsigned char[] = { %s };' % arrayLine( data )

def array2D( data ):
array = [ 'unsigned char[][] = {' ]
for i in data:
array.append( '\t{ %s },' % arrayLine( i ))
array.append( '};' )
print '\n'.join( array )

for cdata in cdata0, cdata1, cdata2:
declare = []
try:
iter(cdata)
try:
iter(cdata[0])
try:
iter(cdata[0][0])
except TypeError:
array2D( cdata )
except TypeError:
array1D( cdata )
except TypeError:
array0D( cdata )

```