j'ai écrit une fonction dans plpgsql unpack_numeric_bytes
, la partie la plus importante des fonctions est:plpgsql - octets ne reçoivent pas déballés droit
FOR i IN 1..v_length LOOP
v_val := v_val + (get_byte(v_bytes, v_byte_index) << v_bit_shift);
v_bit_shift := v_bit_shift + 8;
v_byte_index := v_byte_index + 1;
END LOOP;
Il a bien fonctionné jusqu'à ce que je suis tombé sur la valeur qu'il na pas décodent correctement. et c'est peut-être trop évident mais je ne le vois pas.
L'appel est: select unpack_numeric_bytes(E'g\\363I\\274', array[4], 'f');
À partir du code v_length
est de 4 octets et il essaie de décoder E'g\\363I\\274'
Ce qui revient à: {-1136004249}
.. J'ai remarqué que 2^32-1136004249 = 3158963047, et est la bonne réponse que je cherche! (testé avec la fonction python unpack).
Qu'est-ce qui le rejette? et qu'est-ce que je fais mal? C'est la première fois que la fonction m'a échoué.
Merci!
I figured it out .. mais ne peut pas poster ma réponse encore. Il doit être casté à bigint. – t0x13