Hi there, I am back to the storing byte array issue again. Thanks to all your help I am using the X' sqlite flag to insert the byte array which I before converted into a string of hex values. Works fine except when the byte value is larger then 191. Try code snippet below, I assume the reason is that 192 is not a recognized character in sqlite, when its stored in the db its apparently stored as 65533. From a inserting/reading perspective is there something I am doing wrong? The code has some log statements to observe what is happening
var a=[10,190,191,192]; var hexstring="";for(var i=0;i<a.length;i++){var _h="";if(a[i]<16){_h+="0"}_h+=a[i].toString(16);console.log(_h);hexstring+=_h;} console.log(hexstring); openDatabase('_test_', 1.0, '_test-', 5000).transaction(function(tx) { tx.executeSql("DROP TABLE IF EXISTS MYTABLE", [], function(){ tx.executeSql("CREATE TABLE IF NOT EXISTS MYTABLE(content BLOB); ", [], function(){ tx.executeSql("INSERT INTO MYTABLE values(X'"+hexstring.toUpperCase()+"')", [], //'?' aint working with function() { tx.executeSql("SELECT content FROM MYTABLE ", [], function(transaction, results) { var s=results.rows.item(0).content; for(var i=0;i<s.length;i++) { console.log(s.charAt(i).charCodeAt(0)); } }); },function(transaction, error){console.log(error)}) },function(transaction, error){console.log(error)}) }) }) I think I have a solution which I wanted to avoid. Having an array 256 characters that do not cause problems and using the array as a map when storing and reading the data. I just wanted to avoid that since its pretty much a hack. Any Ideas? Appreciate it, Stan On Mon, Apr 11, 2011 at 10:33 PM, RobG <rg...@iinet.net.au> wrote: > > > On Apr 12, 2:07 am, "Peter Rust" <pe...@cornerstonenw.com> wrote: > > Stan, > > > > I just posted a comment to the SO post: > > > > Assuming SQLite returns a hexadecimal string that looks like > > "611006F462424C4183578E51B87021", you can iterate every two characters, > > slice, parseInt and push onto an array. Since every two characters > > represents a byte, just write a for loop that increase the index by 2 > every > > time instead of by 1. You can grab the two characters via String.slice(), > > like so: hex.slice(ix, ix+2). You can convert these to an integer via > > parseInt(str, 16). So it would look like: > > > > arr = []; > > > > for(var ix = 0; ix < hex.length; ix = ix+2) { > > > > arr.push(parseInt(hex.slice(ix, ix+2), 16)); > > > > } > > Assuming the input is character pairs of hex values, a more efficient > function (removing calls to push amd slice) may be: > > var hexToDec = (function() { > var re = /../g; > return function (hexString) { > var bytes = hexString.match(re); > var i = bytes.length; > while (i--) { > bytes[i] = parseInt(bytes[i],16); > } > return bytes; > } > }()); > > > Example: > > hexToDec('611006F462424C4183578E51B87021') > > returns: [97,16,6,244,98,66,76,65,131,87,142,81,184,112,33] > > > -- > Rob > > -- > You received this message because you are subscribed to the Google Groups > "iPhoneWebDev" group. > To post to this group, send email to iphonewebdev@googlegroups.com. > To unsubscribe from this group, send email to > iphonewebdev+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/iphonewebdev?hl=en. > > -- "Local color. Soak it up" Virginia Vidaura http://www.merkwelt.com/people/stan/ -- You received this message because you are subscribed to the Google Groups "iPhoneWebDev" group. To post to this group, send email to iphonewebdev@googlegroups.com. To unsubscribe from this group, send email to iphonewebdev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/iphonewebdev?hl=en.