#include #include #include #include #include #include #include /* test for little or bigendian */ const int i = 1; #define is_bigendian() ((*(char*)&i)==0) my_bool bytes2float_init(UDF_INIT *initid, UDF_ARGS *args, char *message); float bytes2float(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); void ReverseArray( char *arr ); my_bool bytes2float_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { /* this is how to fail */ if (args->arg_count != 1) { strcpy(message, "bytes2float() requires one argument"); return 1; } if (args->arg_type[0] != STRING_RESULT) { strcpy(message,"bytes2float() requires one string parameter"); return 1; } return 0; } void ReverseArray( char *arr ) { /* reverse a four byte array */ char temp; printf("%s\n","reversing"); temp = arr[0]; arr[0]=arr[3]; arr[3] = temp; temp = arr[1]; arr[1] = arr[2]; arr[2] = temp; } float bytes2float(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { int i; char *cbuf = args->args[0]; for ( i=0; i<4; i++){ fprintf(stderr,"cbuf[%d] = %d\n", i, cbuf[i]); } if ( !is_bigendian() ){ ReverseArray(args->args[0]); }; for ( i=0; i<4; i++){ fprintf(stderr,"cbuf[%d] = %d\n", i, cbuf[i]); } float *fp = (float *) cbuf; fprintf(stderr,"return is %3.5f\n",*fp); return *fp; //double test = 123.43; //fprintf(stderr,"return is %3.5f\n",test); //return test; }