+ string_hexa++;
+
+ size_t len = strlen(string_hexa);
+ if (len <= 16) {
+ iv_hi = 0;
+ iv_lo = strtoull(string_hexa, &end, 16);
+ if (end)
+ return VLC_EGENERIC;
+ } else {
+ iv_lo = strtoull(&string_hexa[len-16], NULL, 16);
+ if (end)
+ return VLC_EGENERIC;
+ string_hexa[len-16] = '\0';
+ iv_hi = strtoull(string_hexa, NULL, 16);
+ if (end)
+ return VLC_EGENERIC;
+ }
+
+ for (int i = 8; i ; --i) {
+ iv[ i] = iv_hi & 0xff;
+ iv[8+i] = iv_lo & 0xff;
+ iv_hi >>= 8;
+ iv_lo >>= 8;