BBencora
Espace de développement avec IA

Sortie bencode canonique

Encodez octets, entiers bornés, listes et dictionnaires à clés binaires en bencode canonique trié de 65536 octets au plus.

● ● ●Bencora●
Méthodes de travail · Sortie bencode canonique ×
def bencode(value):
    active, visited, used, parts = set(), 0, 0, []
    def emit(*chunks):
        nonlocal used
        size = sum(len(chunk) for chunk in chunks)
        if size > 65536 - used:
            raise ValueError("bencode.output")
        used += size
        parts.extend(chunks)
    def encode(item, depth):
        nonlocal visited
        visited += 1
        if depth > 16 or visited > 2048:
            raise ValueError("bencode.bounds")
        if type(item) is int:
            if not -10**18 <= item <= 10**18:
                raise ValueError("bencode.integer")
            emit(b"i", str(item).encode("ascii"), b"e")
        elif type(item) is bytes:
            if len(item) > 65536:
                raise ValueError("bencode.bytes")
            emit(str(len(item)).encode("ascii"), b":", item)
        elif type(item) in (list, dict):
            if id(item) in active or len(item) > 64:
                raise ValueError("bencode.container")
            active.add(id(item))
            try:
                emit(b"l" if type(item) is list else b"d")
                if type(item) is list:
                    for child in item:
                        encode(child, depth+1)
                else:
                    if any(type(k) is not bytes for k in item):
                        raise ValueError("bencode.key")
                    for key in sorted(item):
                        encode(key, depth+1)
                        encode(item[key], depth+1)
                emit(b"e")
            finally:
                active.remove(id(item))
        else:
            raise ValueError("bencode.type")
    encode(value, 0)
    return b"".join(parts)
✳Sortie bencode canonique
✓ ModificationsVérifiez avant d’appliquer ↗
Illustration de l’espace de travail
Projet
Testez conteneurs vides et imbrication, en rejetant cycles, booléens, entiers hors ±10^18, plus de 64 entrées par conteneur, une profondeur supérieure à 16 ou plus de 2048 valeurs visitées.
Vérifiez avant d’appliquer
Comparez le comportement observé au résultat attendu. Si une vérification échoue, cherchez la cause avant de poursuivre les modifications.
Modèles
Configurez un endpoint compatible OpenAI ou Anthropic avec son URL de base et une clé API si nécessaire. Testez la connexion. Un serveur local doit fonctionner ; les outils distants peuvent transmettre des données séparément.
Méthodes de travail

Sortie bencode canonique

Méthodes de travail ↗
Méthodes de travail
def bencode(value):
    active, visited, used, parts = set(), 0, 0, []
    def emit(*chunks):
        nonlocal used
        size = sum(len(chunk) for chunk in chunks)
        if size > 65536 - used:
            raise ValueError("bencode.output")
        used += size
        parts.extend(chunks)
    def encode(item, depth):
        nonlocal visited
        visited += 1
        if depth > 16 or visited > 2048:
            raise ValueError("bencode.bounds")
        if type(item) is int:
            if not -10**18 <= item <= 10**18:
                raise ValueError("bencode.integer")
            emit(b"i", str(item).encode("ascii"), b"e")
        elif type(item) is bytes:
            if len(item) > 65536:
                raise ValueError("bencode.bytes")
            emit(str(len(item)).encode("ascii"), b":", item)
        elif type(item) in (list, dict):
            if id(item) in active or len(item) > 64:
                raise ValueError("bencode.container")
            active.add(id(item))
            try:
                emit(b"l" if type(item) is list else b"d")
                if type(item) is list:
                    for child in item:
                        encode(child, depth+1)
                else:
                    if any(type(k) is not bytes for k in item):
                        raise ValueError("bencode.key")
                    for key in sorted(item):
                        encode(key, depth+1)
                        encode(item[key], depth+1)
                emit(b"e")
            finally:
                active.remove(id(item))
        else:
            raise ValueError("bencode.type")
    encode(value, 0)
    return b"".join(parts)
Espace de développement avec IA

Gardez les modifications de sérialisation compatibles et bornées

Une sortie binaire peut changer de sens sans différence visible dans une comparaison textuelle ordinaire. Bencora est un espace de programmation avec IA pour Windows permettant d’examiner le code de sérialisation en tenant compte de ce risque. Ouvrez le projet et demandez au modèle connecté d’examiner les valeurs acceptées, le contrat de sortie et le code consommateur avant de suggérer un correctif.

Une tâche concrète pourrait examiner la sortie bencode canonique d’un générateur de métadonnées. Demandez à l’assistant d’examiner l’ordre des clés en octets, les conteneurs imbriqués et le rejet des types non pris en charge. Fournissez des jeux d’essai aux sorties connues et décrivez les limites nécessaires à l’application. Concentrez la proposition sur ce générateur et ses appelants au lieu de supposer qu’une modification de sérialiseur est inoffensive parce qu’elle produit des octets apparemment valides.

Vérifiez les limites de ressources avec les allers-retours ordinaires. Exécutez vos tests de profondeur maximale, de sortie trop volumineuse et de conteneurs cycliques, et comparez les octets exacts de dictionnaires représentatifs. Examinez les chemins de nettoyage après rejet pour qu’une tentative échouée ne corrompe pas le travail suivant. La compatibilité exige des preuves provenant des consommateurs du projet autant que des exemples encodés avec succès.

Bencora prend en charge les connexions à des points de terminaison compatibles OpenAI ou Anthropic. Un modèle d’IA sans censure peut être sélectionné lorsque le service configuré en propose un ; outils, restrictions et contexte dépendent de cette configuration. Utilisez la conversation pour expliquer la modification, tandis que vos jeux d’essai établissent si le contrat de sortie est préservé.

Examiner un générateur binaire avec rigueur

Pourquoi comparer les octets exacts plutôt que les seules valeurs décodées ?

Des valeurs décodées équivalentes peuvent cacher des différences d’ordre ou de représentation importantes pour un format canonique. Conservez des jeux d’octets connus pour ces exigences et examinez-les avec les vérifications d’aller-retour déjà utilisées par le projet.

Quel contexte compte pour l’ordre des dictionnaires ?

Montrez les types réels des clés et les consommateurs qui dépendent de la sortie encodée. Demandez à l’assistant de distinguer l’ordre des octets de l’ordre textuel propre au langage. Une conversion pratique en chaîne peut modifier un contrat défini sur des octets bruts.

Faut-il vérifier les limites de taille uniquement après l’encodage ?

Examinez la politique de ressources nécessaire à l’application. Une vérification finale peut survenir après un travail ou des allocations importants. Demandez où la proposition impose les bornes et testez les chemins de rejet, notamment les valeurs imbriquées dépassant la sortie autorisée.

Pourquoi inclure un conteneur cyclique ?

Il vérifie comment le générateur traite une entrée impossible à développer comme un arbre fini ordinaire. Vérifiez le rejet explicite et le nettoyage. Les exemples d’encodage réussis du modèle ne prouvent pas que le traitement des structures de conteneurs mal formées se termine correctement.

Télécharger pour Windows ↗

Bencora · Mis à jour 2026-10-25