Au travail aujourd'hui, nous avons jeté ensemble cette tentative:Comment convertir un entier 8 bits en une chaîne binaire dans xquery?
xquery version "1.0";
declare option saxon:output "omit-xml-declaration=yes";
declare variable $x := 99;
string-join(
for $b in (128,64,32,16,8,4,2,1)
let $xm := $x mod ($b*2)
return
if ($xm >= $b) then "1" else "0"
, "")
Avez-vous une meilleure façon?
Prenant la réponse d'Oliver, j'ai fait la fonction inverse.
declare function local:bin-byte($x as xs:string) as xs:unsignedByte
{
let $binary-nibbles := ("0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111")
return xs:unsignedByte(
(index-of($binary-nibbles, substring($x,1,4))-1) * 16
+ (index-of($binary-nibbles, substring($x,5,4))-1)
)
};
Nous avons réfléchi à ce sujet, mais je n'ai pas essayé. Magnifiquement simple et rapide aussi je soupçonne (ce qui pourrait être important pour nous). Notre sortie pour notre application sera XML ou texte. Dans ce cas, il s'agit probablement de XML. – philcolbourn
devrait xs: byte être xs: unsignedByte? – philcolbourn
vous avez raison; J'ai fait ce changement –