Just figured it out without a UDF(not documented anywhere that I found). SELECT conv(hex(fdata),16,10) INTO fdata_bigint;
So a double conversion seems to work for me. You solution looks like it will work, but since I was able to get it to work without a UDF, I'm not going to test it out. Thanks. David Godsey > "David Godsey" <[EMAIL PROTECTED]> wrote on 03/22/2006 01:21:07 PM: > >> I'm in the process of writing my first UDF and would appreciate some > help. >> >> I am pulling data from a table like: >> >> SELECT payload_time, >> SUBSTR(BINARY(frame_data), >> FLOOR(foffset/8)+1, >> CEIL((flength + (foffset %8 ))/8)) >> FROM RawMajorFrames >> WHERE raw_major_frame_id=rfid >> INTO ptime,fdata; >> >> frame_data is type BLOB. It is raw data collected. The substr will get >> the specific bytes I'm interested in. What I need to do, is if the data >> is <= 8bytes, convert it to a BIGINT, so I can do some masking on the >> data. >> >> So I am writing a UDF to do the job, but I am apparently unfamiliar with >> the Mysql data types and how I can convert them. >> >> In a procedure. >> DECLARE fdata_bigint BIGINT UNSIGNED; >> SELECT BlobToInt(binary(fdata)) INTO fdata_bigint; >> >> my_bool BlobToInt_init( UDF_INIT* initid, UDF_ARGS* args, char* message > ) >> { >> if (args->arg_count != 1) >> { >> strcpy(message,"Wrong arguments to BlobToInt; should be >> BlobToInt(blob)"); >> return 1; >> } >> return 0; >> } >> longlong BlobToInt( UDF_INIT* initid, UDF_ARGS* args, char* is_null, > char >> *error ) >> { >> longlong tmplong = *((longlong*)args->args[0]); >> return tmplong; >> } >> >> I guess I was just assuming I could just cast the data as the type I > want, >> but that doesn't seem to work. The function returns a 0. >> >> Any help would be appreciated. >> >> Accomplishing the impossible means only that the boss will add it to > your >> regular duties. >> >> David Godsey >> > > C is not my strongest language but aren't you getting a null-terminated > string as args[0] ? What if you allocated a longlong and byte-copied the > bytes from args[0] into your longlong? Maybe something like... > > longlong BlobToInt( UDF_INIT* initid, UDF_ARGS* args, char* is_null, char > *error ) > { > char idx, *cArg > longlong tmplong, *plonglong ; > plonglong = &tmplong; > cArg = (args->args[0]); > for(idx=0;idx<8;idx++) { > plonglong[idx]=cArg[idx]; > } > return tmplong; > } > > Again, I strongly stress that C/C++ is not my best language (I don't use > it nearly enough) but I think you can see what I was trying to do. Other > options: memcpy(), strcpy(), strncpy() etc.... > > Shawn Green > Database Administrator > Unimin Corporation - Spruce Pine > > > > Accomplishing the impossible means only that the boss will add it to your regular duties. David Godsey -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]