Big o Little Endian


57

Scrivere un programma o una funzione che emetta un Lif eseguito su una piccola architettura endian o un Bif eseguito su una grande architettura endian. Uscita in minuscolo lo bè anche accettabile.

Non ci sono input.

Il punteggio è il golf del codice, quindi vince il codice con il minor numero di byte.

Modifica: come da commenti qui sotto, sto chiarendo che la voce deve essere in grado di funzionare su entrambe le architetture.

Credo che ci sia una sola risposta che questo influisca e che la risposta abbia chiaramente indicato che è così.


1
Il ricordo della scatola. Non sono sicuro di cosa intendi
Liam,

7
Penso che questa sia una sfida interessante (ed è fuori dalla norma) ma sarà estremamente difficile testarla. Soprattutto perché la maggior parte del codice finirà per essere estremamente specifica per la piattaforma.
DJMcMayhem

7
Sì, penso che sarà interessante perché si spera che qualcosa che esolangs e le lingue del golf hanno tempi più difficili rispetto alle lingue "normali". Ho la sensazione che non saranno così difficili da verificare. Nel peggiore dei casi dovrebbero essere verificabili a mano
Liam,

2
Immagino sia vietata una risposta basata su un codice macchina specifico? Altrimenti B0 4C C3, che è mov al, 'L' / reto unsigned char f(){ return 'L'; }, sarebbe una risposta x86 valida.
Margaret Bloom,

5
Bravo! per una sfida con il golf del codice in cui i linguaggi di programmazione generici possono essere competitivi.
PellMell,

Risposte:


42

Python, 33 byte

import sys
exit(sys.byteorder[0])

sys.byteorderè o 'little'o 'big'(e per quelli di voi che leggeranno questa frase senza guardare il codice, [0]significa prendere il primo carattere).


La sfida dice che l'output deve essere Le B(o la variante minuscola), non l'intera parola.
user2428118,

43
Ecco perché dice sys.byteorder[0], cioè il primo carattere di byteorder.
sabato

36

C, 26 byte

a=66<<24|76;f(){puts(&a);}

Presuppone caratteri a 32 bit inte ASCII. Testato su amd64 (little-endian) e mips (big-endian).

GCC, 23 byte

00000000: 613d 2742 0000 4c27 3b66 2829 7b70 7574  a='B..L';f(){put
00000010: 7328 2661 293b 7d                        s(&a);}

Suggerito da feersum. Il valore delle costanti multi-carattere dipende dall'implementazione, ma questo sembra funzionare in GCC. Testato sulle stesse architetture.


7
Più breve è a='B\0\0L';La \0s può essere sostituita con byte nulli.
feersum

1
@feersum L'endianità delle costanti multi-carattere sembra dipendere dall'implementazione. Normalmente non mi preoccuperei così tanto nel code golf, ma questa sfida è tutta quella di distinguere tra implementazioni.
Anders Kaseorg,

Questo codice attualmente funziona in qualcosa di diverso da GCC?
feersum

1
@feersum C89 consente entrambi.
Anders Kaseorg,

1
Utilizzando xlc (VisualAge C ++ Professional / C per compilatore AIX, versione 6) su un RS6000 con AIX 5.2 il programma a 26 byte stampa correttamente "B"
Jerry Jeremiah,

24

MATLAB / Octave, 24 byte

[~,~,e]=computer;disp(e)

La computerfunzione fornisce informazioni sul computer su cui è in esecuzione. La terza uscita è endianness: Lo rispettivamente Bper little o big endian.

Provalo su Ideone .


1
che cosa. Questo è qualcosa per StackOverflow, non lo sapevo!
Brain Guider,

20

JavaScript ES6, 50 byte

_=>"BL"[new Int8Array(Int16Array.of(1).buffer)[0]]

Non so chi abbia deciso che fosse una buona idea per gli oggetti TypedArray esporre l'endianità nativa dell'interprete, ma eccoci qui.


5
La gente di WebGL ha pensato che fosse una buona idea, evitare di convertire l'endianness quando si passa alla GPU. Praticamente tutti gli altri lo hanno ritenuto stupido ... :(
gsnedders il

11

C, 36 35 byte

1 byte grazie a @algmyr e @owacoder.

main(a){printf(*(char*)&a?"L":"B");}
main(a){putchar(66+10**(char*)&a);}
main(a){putchar("BL"[*(char*)&a]);}

Crediti qui .

Non testato dal momento che non ho una macchina big-endian.


2
La specifica C consente una mainfunzione a argomento singolo ?
CodesInChaos,

@codesinchaos sì. Sarà il numero di argomenti della riga di comando forniti. Di solito qui viene utilizzata una variabile iniziata 1perché non viene fornito alcun input (e il nome del programma conta sempre come primo argomento)
Liam,

2
@Liam: se è consentito qualcosa di diverso da 0 o 2, l'implementazione viene definita in C11.

1
Or main(a){putchar("BL"[*(char*)&a]);}.
owacoder,

2
Se si fa confusione con la convenzione di chiamata scende a 31: main(char a){putchar("BL"[a]);}.
Andrea Biondo,

8

Mathematica, 22

{B,L}[[$ByteOrdering]]

Questo probabilmente infrange alcune regole sul non usare una funzione integrata, ma non sono davvero interessato a rbergare un'alternativa.


1
Gli built-in vanno bene (anche la maggior parte delle risposte li utilizza)
Liam,

2
E ancora una volta, Mathematica ha un built-in!
gcampbell,

3
Penso che questo sia uno snippet, non un programma o una funzione, e dovresti aggiungerlo &per renderlo una funzione. (Ma potrebbe esserci disaccordo su ciò che costituisce un "programma".)
Anders Kaseorg,

1
@Anders Non ho molta familiarità con gli standard attuali per PCG (se mai lo sono stato) ma IMHO uno dei vantaggi di un linguaggio interpretato è che uno snippet è un programma. Questo può essere eseguito in modo autonomo tanto quanto qualsiasi altro programma in Mathematica .
Mr.Wizard,

1
@ Mr.Wizard Si noti che un "programma" in Mathematica si riferisce a uno script autonomo (che richiede una stampa esplicita), mentre questa risposta utilizza REPL.
LegionMammal978,

8

C, 27

Un byte in più, ma eccolo qui:

f(){putchar(htons(19522));}

Ha funzionato bene, puoi spiegarmelo, per favore.
ABcDexter,

3
@ABcDexter l'espansione binaria di 19522 è 1001100 01000010(spazio per i byte separati). Ora se prendi ogni byte, converti indietro in base 10 e controlla la tabella ASCII, vedrai che questa sequenza di byte è equivalente LB. htonsfarà il suo dovere e putcharstamperà solo l'LSB. Nei sistemi big-endian, questo sarà B, in little-endian, htonsinvertito i byte, così come lo è l'LSB L.
Kroltan,

Sostituisci 19522con 'LB'per gli avvisi del compilatore e -1 byte.
Stan Strum,

8

Codice macchina PowerPC - 20 byte

PowerPC è bi-endian (l'endianness può essere impostato all'avvio), quindi questo codice dovrebbe essere conforme alla richiesta di sfida di poter eseguire sia su macchine BE che LE. Questa è una funzione che restituisce 1 'L' o 'B'dipende dall'endianness attualmente impostato.

Come funzione, AFAICT è conforme all'ABI PowerPC SVR4 (utilizzato da Linux su ppc32), all'ABI PowerOpen (utilizzato ad esempio da AIX) e all'ABI OS X. In particolare, si basa solo sul fatto che GPR 0 è un registro di lavoro volatile e GPR 3 viene utilizzato per restituire valori "piccoli".

00000000 <get_endian>:
   0:   7c 00 00 a6     mfmsr   r0
   4:   54 03 0f fe     rlwinm  r3,r0,1,31,31
   8:   1c 63 00 0a     mulli   r3,r3,10
   c:   38 63 00 42     addi    r3,r3,66
  10:   4e 80 00 20     blr

Ora, va così:

  • l' MSR viene letto nel registro GP 0; l'MSR contiene al bit 31 le impostazioni di endianness (0 = big endian; 1 = little endian);
  • rlwinmestratti appena un po: prende il valore in GPR0, r Otates l EFT da 1 posto (in modo che ora si trova in posizione 0) e m chiede con 1 (la maschera generata da coloro 31,31 2 ); il risultato viene inserito nel registro GP 3;
  • moltiplica il risultato per 10 e somma 66 ( 'B') (10 è la differenza tra 'L'e 'B')
  • infine, torna al chiamante

Appunti

  1. sì, la domanda richiede di stampare , ma non è chiaro come dovrei stampare roba nell'assemblaggio che dovrebbe funzionare senza modifiche su diversi sistemi operativi. =)
  2. per chi fosse interessato, consultare la documentazione di rlwinm ; non sapendo quasi nulla di PowerPC, ho trovato questo tipo di istruzioni estremamente interessanti.

    Aggiornamento 2018 : Raymond Chen pubblica una serie sull'architettura PowerPC, qui puoi trovare il suo fantastico post su rlwinm& amici.


7

Java 8, 96, 64 52 byte

()->(""+java.nio.ByteOrder.nativeOrder()).charAt(0);

Un golf basato su questa risposta SO . Tutto il merito va a @LeakyNun e @AlanTuning. Java mantiene la striscia libera.

96 byte:

 char e(){return java.nio.ByteOrder.nativeOrder().equals(java.nio.ByteOrder.BIG_ENDIAN)?'b':'l';}

64 byte:

char e(){return(""+java.nio.ByteOrder.nativeOrder()).charAt(0);}

B / c non testato Non ho accesso a una macchina big-endian.


1
char e(){return(""+java.nio.ByteOrder.nativeOrder()).charAt(0);}
Leaky Nun,

char e(){return(""+java.nio.Bits.byteOrder()).charAt(0);}
Leaky Nun,

@LeakyNun Non vedo Bit nell'API Java e quando lo eseguo mi dà "Bit non è pubblico in java.nio"
Blue

Oh, va bene allora.
Leaky Nun,

52 byte se usi un lambda! ()->(""+java.nio.ByteOrder.nativeOrder()).charAt(0);
Shaun Wild,

6

Perl, 38 36 byte

say+(pack"L",1 eq pack"V",1)?"L":"B"

Funziona impacchettando un numero nell'ordine byte predefinito del sistema e confrontandolo con un numero impacchettato nell'ordine byte little-endian.


6

(G) Avanti, 24 byte

here $4200004C , c@ emit

Suppone che le celle siano a 32 bit (e che l'interprete Forth supporti i prefissi di base di Gforth ). Memorizza semplicemente il numero 0x4200004C in memoria e quindi visualizza il byte nella parte bassa.


5

C, 34 byte

Ciò presuppone la codifica dei caratteri ASCII

main(a){putchar(66+10**(char*)a);}

Chiama senza discussione.

Spiegazione:

A chiamata, asarà 1. *(char*)aaccede al primo byte di a, che su piattaforme little-endian sarà 1, su piattaforme big-endian sarà 0.

Su piattaforme big-endian, questo codice passerà quindi da 66 + 10 * 0 = 66 a putchar. 66 è il codice ASCII per B. Su piattaforme little-endian, passerà 66 + 10 * 1 = 76, che è il codice ASCII per L.


5

C #, 60 52 byte

C # è sorprendentemente competitivo in questo.

char e=>System.BitConverter.IsLittleEndian?'L':'B';

Ringraziamenti a Groo per la sintassi di C # 6.

60 byte:

char e(){return System.BitConverter.IsLittleEndian?'L':'B';}

Con la sintassi C # 6 puoi accorciarla un po ': char e=>System.BitConverter.IsLittleEndian?'L':'B';ovviamente questo (così come la risposta Java) in realtà non stampa il valore.
Groo,

Benvenuto in Programmazione di puzzle e codice golf! Questa è una bella prima risposta.
Alex A.

5

Julia, 24 19 byte

()->ntoh(5)>>55+'B'

Questa è una funzione anonima che non accetta input e restituisce a Char. Per chiamarlo, assegnarlo a una variabile. Presuppone che i numeri interi siano a 64 bit.

La ntohfunzione converte l'endianità del valore passato dall'ordine dei byte di rete (big endian) a quello utilizzato dal computer host. Su macchine big endian, ntohè la funzione identità poiché non è necessario eseguire alcuna conversione. Su macchine little endian, i byte vengono scambiati, quindi ntoh(5) == 360287970189639680. Che è anche, forse più leggibile, uguale a: 0000010100000000000000000000000000000000000000000000000000000000in binario.

Se spostiamo leggermente il risultato di ntoh(5)55, otterremo 0 su macchine big endian e 10 su macchine little endian. Aggiungendolo alla costante del personaggio 'B', otterremo 'B'o 'L'per macchine endian grandi o piccole, rispettivamente.

5 byte salvati grazie a FryAmTheEggman e Dennis!


Per 32 bit dovresti cambiare da 55 a 23 (anche il 5 nel 16 bit avrebbe dovuto essere 7, errore mio). Penso che Dennis intendesse qualcosa del tipo ()->ntoh(5)>>55+'B':?
FryAmTheEggman,

1
f()='L'-ntoh(10)%16e f()='L'-ntoh(10)&10dovrebbe funzionare su tutte le piattaforme.
Dennis,


5

Lisp comune, 27 byte

Testato su SBCL ed ECL. Per un approccio portatile, si dovrebbero usare funzionalità banali .

(lambda()'L #+big-endian'B)

La #+notazione è una condizione del tempo di lettura , che legge il modulo successivo solo se l'espressione condizionale restituisce true. Qui la condizione è l'intero #+big-endiantesto, il che significa che il test è soddisfatto se la :big-endianparola chiave appartiene *FEATURES*all'elenco (un elenco che contiene tra l'altro informazioni specifiche della piattaforma). L'espressione seguente è 'B, che viene letta o ignorata in base all'esito del test. Se la tua piattaforma è big-endian e scrivi il modulo sopra nella REPL, è esattamente come se avessi scritto quanto segue:

CL-USER>(lambda()'L 'B)

(NB CL-USER>è il prompt)

Il corpo di una funzione è implicito PROGN, nel senso che viene restituita solo la valutazione dell'ultima espressione. Così il simbolo rendimenti superiori in realtà B. Se tuttavia la condizione del tempo di lettura è falsa, il modulo si legge come se si scrivesse:

CL-USER>(lambda()'L)

... che semplicemente restituisce un simbolo L.


Gli snippet non sono ammessi; scrivere invece programmi o funzioni completi.
Erik the Outgolfer,

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Aggiornato, grazie
coredump,

Nota: gli snippet sono consentiti solo se esplicitamente consentito dall'OP.
Erik the Outgolfer,

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Potresti fornire un riferimento per questo? Ci sono altre risposte REPL qui e / o frammenti di shell e questo meta post suggerirebbe che le risposte REPL potrebbero essere ok per impostazione predefinita. Grazie.
coredump,

5

ARMv6 e versioni successive: 20 byte di codice macchina

0xE10F1000 : MRS   r0,CPSR        ; read current status register
0xE3110C02 : TST   r0,#1<<9       ; set Z flag if bit 9 set
0x03A0004C : MOVEQ r0,#'L'        ; return 'L' if Z clear
0x13A00042 : MOVNE r0,#'B'        ; return 'B' if Z set
0xEBxxxxxx : BL    putchar        ; print it (relative branch)

Non testato, poiché non ho una macchina adatta a portata di mano. Il bit 9 del CPSR fornisce l'attuale endianness di carico / archivio.


È possibile utilizzare un ritorno dalla funzione ( BX lr, vero?) Invece di putchar, perché r0è il registro corretto per il risultato restituito.
Anatolyg

In effetti, quello (in realtà MOV pc, lr) era in una delle mie precedenti modifiche. Tuttavia, questo soddisfa le specifiche per stampare la lettera, non solo per restituirla.
user1908704

Potrei leggere il riferimento in modo errato, ma penso che ciò possa essere fatto nella codifica dell'istruzione "thumb 2". Ciò significherebbe che la prima istruzione è rimasta a 32 bit ("codifica T1" a pagina F7-2720 del manuale di riferimento ARM v8, che la renderebbe 0xF3EF_8000); il secondo è anche a 32 bit (la codifica dell'operando è un po 'bizzarra, ma può essere eseguita con "i: imm3" impostato su 0010 e "imm8" su 00000010, che fornisce un'istruzione complessiva di 0xF010_2F02). Prima della terza istruzione, dobbiamo inserire "ITE EQ" (0xBF0C) per controllare le condizioni sulle successive due istruzioni MOV, che diventano 0x204C e ...
Jules

... 0x2042 (risparmiando 2 byte complessivi). Quindi l'istruzione BL finale è un po 'difficile da rappresentare perché i bit dell'indirizzo che non conosciamo finiscono per sparpagliarsi tra i bit dell'istruzione che conosciamo, ma è anche una codifica a 32 bit, quindi il risultato sarebbe essere 18 byte totali (F3 EF 80 00 F0 10 2F 02 BF 0C 20 4C 20 42 F? ?? ?? ??). Credo che questo cambi l'architettura in ARMv8 e versioni successive, sebbene possa funzionare in ARMv7 (?).
Jules

4

Perl 5, 21 + 1 = 22 byte

Corri con perl -E.

say ord pack(S,1)?L:B

Testato su amd64 (little-endian) e mips (big-endian).


Il -Eflag è davvero necessario nel conteggio dei byte? Puoi solo dire che usi Perl 5.10 (poiché il saycomando è disponibile in questa versione)
Paul Picard,

1
@PaulPicard Ma use 5.10.0;sono molti più byte!
Anders Kaseorg,

1
@PaulPicard Il tuo punto è sbagliato. Perl 5.10 richiede l' -Eopzione o l' useistruzione per say.
Anders Kaseorg,

3
-Eè "gratuito" su PPCG. Non c'è bisogno di aggiungere nulla.
Ven

1
(comunque -ne -pnon lo sono)
Ven

4

R, 28 23 byte

substr(.Platform$endian,1,1)

.Platform$endianritorna bigse eseguito su big endian e littlese su little. Qui, usando substr, restituisce la prima lettera dell'output, quindi o bo l.

Poiché endianè l'unico oggetto che inizia con un eoggetto contenuto, .Platformpossiamo ridurlo grazie alla corrispondenza parziale al seguente codice di 23 byte:

substr(.Platform$e,1,1)

3

Clojure, 46 44 byte

#(nth(str(java.nio.ByteOrder/nativeOrder))0)

Questa è una funzione che utilizza il builtin Java per ottenere l'endianness della macchina. Quindi ottenere la rappresentazione di stringa che sarà o "LITTLE_ENDIAN"o "BIG_ENDIAN"e prendere il primo carattere di qualsiasi stringa scelta e restituirla.

Salvato 2 byte grazie a @ cliffroot .


Che cos'è davvero il clojure, è lisp o java?
Leaky Nun,

@LeakyNun Forse un pratico LISP che funziona con Java? È difficile da dire.
miglia

#(nth(str(java.nio.ByteOrder/nativeOrder))0)è più corto di 2 byte
cliffroot il

3

Rubino, 3130 caratteri.

puts [1].pack("s")>"\01"??L:?B

Hmm, deve essere un modo migliore. Conta 5 caratteri in meno se il carattere non deve essere emesso poiché penso che altre soluzioni omettano la stampa. vale a dire rimuovere la parte "put" se non si desidera stampare nulla.


Se ricordo bene, dopo Ruby 1.9, è possibile utilizzare ?Le ?Bal posto di puts :Leputs "B"
Sherlock9

Penso puts [76,66].pack("s")[0]che funzionerà.
Wayne Conrad,

@ Sherlock9, grazie, un personaggio in meno. @WayneConrad, forse aggiungi la tua risposta, non ho una grande macchina endian da testare ma su little endian funziona. Ma cambiare come questo non funziona: puts [76,66].pack("s>")[0]. Ciò significa che è possibile non lavorare su big endian per qualche motivo che non capisco bene. Ma questo sembra funzionare (derivato dalla tua soluzione) puts [19522].pack("s>")[0]. WDYT? Mi chiedo se riesco a trovare un posto per valutare su big endian.
Akostadinov,

Purtroppo, mi manca anche una macchina big-endian su cui testare.
Wayne Conrad,

3

Bash (e altre shell unix), 32 (33) byte

Primo e secondo tentativo:

case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L         # non-portable

Grazie a Dennis, versione più corta:

od<<<a|grep -q 5&&echo L||echo B  # non-portable
echo|od|grep -q 5&&echo B||echo L # portable

L' echoutilità genera una nuova riga, con valore esadecimale 0Ae nessun altro output. Perché <<<alo è 61 0A.

L' odutilità, per impostazione predefinita, interpreta l'input come parole a due byte, a zero se il numero di byte è dispari e converte in ottale. Ciò comporta l'interpretazione dell'output dell'eco 0A 00, che viene convertito in 005000big-endian o 000012in little-endian. 61 0Adiventa 005141in little-endian e 060412in big-endian. L'uscita piena di od comprende anche indirizzi e dimensione dei dati che significa che non possiamo usare 0, 1o 2per il test.

Il comando è ben definito per esporre l'endianità del sistema. Dallo standard :

L'ordine dei byte utilizzato durante l'interpretazione dei valori numerici è definito dall'implementazione, ma deve corrispondere all'ordine in cui una costante del tipo corrispondente è memorizzata nel sistema.

Note sulla compatibilità

Non sono sicuro che inserendo echo|odbackquotes senza virgolette doppie [che si traduce in un argomento di tre parole in case] sia supportato su tutti i sistemi. Non sono sicuro se tutti i sistemi supportano gli script di shell senza una nuova riga finale. Sono per lo più sicuro, ma non del 100%, del comportamento di od con l'aggiunta del byte di riempimento sui sistemi big-endian. Se necessario, echo apuò essere utilizzato per le versioni portatili. Tutti gli script funzionano in bash, ksh e zsh e quelli portatili funzionano in dash.


Nessuna delle modifiche è necessaria; basta inserire una shell in cui funziona nell'header della lingua e il gioco è fatto.
Dennis,

1
@Dennis mi piace fare questo tipo di analisi ... anche se è più divertente se mi faccio trovare qualcosa di non-standard che ottiene una risposta più breve in bash o zsh rispetto agli altri. Forse vedrò cosa si può fare[[
Random832

1
Niente di sbagliato nell'analisi. L'ultimo paragrafo sembrava che tu fossi incerto se una risposta specifica alla shell fosse valida ... od<<<a|grep -q 5&&echo L||echo Bdovrebbe funzionare in Bash e in altri.
Dennis,

L'ho testato su una macchina virtuale di fascia alta e echo|odstampa 0000000\n005000\n0000001come previsto.
Dennis,

@ user17752 Perché l'endianness non influenza l'output di od -a.
Casuale 832

3

PHP, 16 byte

<?=pack(S,14)^B;

Questo utilizza due trucchi non utilizzati nelle due risposte PHP esistenti:

  1. Il valore passato a pack () o unpack () può essere qualsiasi cosa, non solo 0 o 1.
  2. L'operatore XOR bit a bit ( ^) lavora su stringhe e il risultato è lungo solo quanto la stringa più corta, evitando la necessità di un indicizzatore di stringa o di un operatore ternario.

2

Nodo, 42 byte

n=>require('os').endianness()[0]

Pro: c'è un builtin. Contro: i nomi delle proprietà sono molto lunghi


2

PowerShell, 44 byte

[char](66+10*[BitConverter]::IsLittleEndian)

Il personaggio 66 è B , e successivamente 10 caratteri è il numero 76, L. Un valore booleano "true" diventa 1quando viene cast su un numero. BitConverterè una classe .NET standard.


1

Racchetta, 35 28 byte

(if(system-big-endian?)'B'L)

'Bo 'Lrispettivamente. Fammi sapere se questo non è abbastanza specifico :)



1

Haskell (utilizzando tipi numerici con dimensioni limitate solo per GHC), 75 byte

import Unsafe.Coerce
import GHC.Int
f="BL"!!fromEnum(unsafeCoerce 1::Int8)

(non testato su un'architettura big-endian, ma sembra che dovrebbe funzionare!)


1

K, 15 byte

    ("bl")@*6h$-8!`
    ,"l"

Spiegazione;

    From right to left;
    -8!`       /serialises the back tick and returns (0x010000000a000000f500)
    6h$-8!`    /This casts the result to `int which is type 6h(could have used `int$-8!`) - the result is (1 0 0 0 10 0 0 0 245 0i)
    *6h$-8!`   /* means first, we take the first item which is 1. Since it will be either 1 or 0, we can use it to index (@) into the two element list on the left i.e. ("bl")1 returns "l" and ("bl")0 returns b

1

Bash, 27 byte

iconv -tucs2<<<䉌|head -c1

( U + 424C ) è codificato come tre byte UTF-8:E4 89 8C .

Si presume che iconvutilizzi la funzione di glibc e che venga utilizzata una locale UTF-8.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.