Ah ouais ? j'ai toujours cru que c'était pas standard.
Ah ouais ? j'ai toujours cru que c'était pas standard.
Salut les programmeurs,
Vous pouvez pas imagine que ce que passez c'est dernier jours!
disque dure de mon pc portable est plante, alors Go LiveLinux, 8h de copier 122Go vers PC fixe, une seul redémarrage est disque dure du PC fixe plant aussi ... alors go acheter un nouveau est un autre 8h du copiage vers pc portable !!! ... Mais pas grave, une experiance
- - - - - - - - - - - - - - - - - -
j'ai chercher sur l'internet une solution .NET pour Dump Hexadécimal d'un texte mais toujours résultats des valeurs hexa!
comment convertir un character to c-code hexa sil-vous-plaît ??
Eh ben t'as eu de gros pbs de disque dur
Il faut que tu saches que l'hexadécimal c'est une juste un représention des nombres (utilisant 16 caractères différents), le décimal en est une autre (utilisant 10 caractères). Un nombre peut être écrit en utilisant la représentation que tu veux mais c'est toujours le même nombre.
Si tu veux afficher la représentation hexadécimale d'un nombre tu peux faire:
Après pour afficher un dump d'un fichier, tu n'as qu'à lire le fichier octet par octet et afficher la représentation hexadécimale de chaque octet lu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("%x", nombre);
Salut tout le monde,
Intéressante cette discussion.
Voici ma maigre contribution:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #define UNICODE #define _UNICODE #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR pStr,int nCmd) { wchar_t const * txt = L"\uFEE1\uFEAA\uFED8\uFEDF\uFE83 \uFE93\uFEAE\uFEDB"; MessageBoxW(0, txt, L"Sport", MB_OK); txt = L"\uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF"; MessageBoxW(0, txt, L"Langue", MB_OK); return 0; }
Pour la traduction, j'ai fait appel au classique traducteur Google.
Et pour récupérer la valeur Unicode des symboles, j'ai utilisé Charmap.
Mais il y a quand même quelque chose qui me turlupine. Peut-être une interrogation sur l'interprétation de ces mêmes caractères entre les formats Little et Big Endian ou plutôt sur la représentation littérale que le système en fait. Enfin, bref.
Il faudrait voir aussi s'il ne serait pas plus intéressant de placer ces chaines dans un fichier ressource.
Salut les programmeurs,
J'ai bien avancer dans mon projet gras a vous aide, je ne oublier jamais votre aide, sur-tous monsieur Twindruff
J'ai trouver que votre solution monsieur Twindruff est vraiment bien est il est toujours marche bien, je peux afficher des characters Unicode par représentation hexadécimale, ou bien juste taper code UNICODE, par exemple ESPACE = "\u0628" أ = "\u0623" etc..
avec solution de monsieur Twindruff je fait:
j'ai trouver une liste complet des chracters Unicode ici : http://www.babelstone.co.uk/Software/BabelMap.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part ((wchar_t*)(char[])L"\u0623")
Pour changer titre de la fenêtre est afficher character Unicode أ avec fonction SetWindowText():
Ça marche bien, mais j'ai quelque petit problème avec l'affichage des variables qui son déclarer dans mon petit programme C, Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part SetWindowText(hwnd, ((wchar_t*)(char[])L"\u0623") );
Comment sil-vous-plaît afficher un variable déjà déclarer ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int a; a = 123; SetWindowText(hwnd, ((wchar_t*)(char[])L"\u0623 %d", a) );
C'est quoi cette horreur?
un simple
devrait suffire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SetWindowText(hwnd, L"\u0623");
depuis quand SetWindowText attend un chaine formatée?
Comme d'habitude, il faut formater la chaine au préalable.
http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx
Salut,
Tu as raison à propos de SetWindowText(hwnd, L"\u0623"); Merci nicolas.sitbon
Mais j'ai encore des difficultés à afficher la variable, je ne peux pas utiliser sprintf_s car je travaille pas sur Visual Studio mais je peux utiliser _tprintf !!! j'ai pas encore d'expérience de formatage des chaînes
Aucun erreur mais... buffer est toujours vide !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TCHAR buffer[50]; int i = 5; _tprintf(buffer,"abc %d", i); SetWindowTextW(hwnd, buffer);
Pourquoi ??
RAPPEL: Je veux afficher la variable 'i' dans le titre de la fenêtre.
_tprintf affiche sur la console et ce n'est pas ce que tu veux faire, tu veux afficher dans un buffer.
utilise _stprintf :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TCHAR buffer[50]; int i = 5; _stprintf(buffer,"abc %d", i); SetWindowTextW(hwnd, buffer);
N'utilise pas explicitement SetWindowTextW si tu utilises _stprintf...
Ou bien, avec un SDK assez récent, on peut utiliser les fonctions de <strsafe.h>:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TCHAR buffer[50]; int i = 5; _stprintf(buffer, _T("abc %d"), i); SetWindowText(hWnd, buffer);
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 TCHAR buffer[50]; int i = 5; /* Note: Oui, c'est bien sizeof ici, en nombre de bytes. Si j'avais voulu mettre le nombre de caractères, j'aurais utilisé StringCchPrintf à la place. */ StringCbPrintf(buffer, sizeof buffer, _T("abc %d"), i); SetWindowText(hWnd, buffer);
Edit: Tiens, c'est nul, il n'y a pas d'équivalent à _scprintf() (ou snprintf(NULL) sous C99) dans <strsafe.h>...
Moi, ce qui me manque le plus, c'est un équivalent à asprintf().
Bonjour les programmeurs,
Oui, vous avez raison a propos de _stprintf, mais buffer reste vide dans mon application Unicode!, est si je ajoute _T je get erreur que il undeclared! même j'ai inclue header correspondant, alors j'ai remplacer _T par L"" est ca marche bien, est a propos de SetWindowText et SetWindowTextW les deux marche bien! est la même chose pour MessageBox et MessageBoxW.
voila le code final (avec test de MessageBox):
NOTE:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 TCHAR buffer[50]; int i = 123; _stprintf(buffer,L"\u0623\u0020%d", i); SetWindowTextW(hwnd,buffer); MessageBoxW(NULL,buffer,buffer,MB_OK|MB_RTLREADING|MB_RIGHT);
\u0623 = أ
\u0020 = Espace
Compilateur TCC: http://bellard.org/tcc/
Bute : Développez une application Unicode avec TCC.
Est Merci a tous les programmeurs Twindruff, Médinoc, Melem, maxim_um, nicolas.sitbon, ram-0000, qui ma aider a avancer dans mon projet
Bravo a vous
NON, ton problème vient du fait que tu as oublié d'inclure tchar.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part #include <tchar.h>
Si, j'ai inclue les header + define de Unicode, _UNICODE, _MBCS
Twindruff il ma le signe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #define UNICODE #ifdef UNICODE #define _UNICODE #else #define _MBCS #endif #include <windows.h> #include <tchar.h> ... CODE ...
http://www.developpez.net/forums/d80...c/#post4600934
Merci nicolas.sitbon
Est ce que ce code compile et s'exécute correctement chez toi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #define UNICODE #define _UNICODE #include <windows.h> #include <tchar.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg ; HWND hwnd; WNDCLASS wc = {0}; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpszClassName = _T("Window"); wc.hInstance = hInstance ; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.lpfnWndProc = WndProc; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); RegisterClass(&wc); hwnd = CreateWindow(wc.lpszClassName, _T("العربية"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 200, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while( GetMessage(&msg, NULL, 0, 0) > 0) { DispatchMessage(&msg); } return (int) msg.wParam; }
Ça compilera pas parce que le compilo ne sait lire que des fichiers source ANSI, il ne lit pas l'UTF-8 ou l'unicode.
Par contre avec un titre de fenêtre ANSI ça devrait être bon.
Edit: après un ptit test, le compilo a du mal avec la macro _T (pareil pour TEXT).
Salut,
Non, il se compile pas, comme Twindruff ta dit TCC supporte pas UTF-8, alors je doit remplacer "العربية" par "\u[CODE-UNICODE-CORRESPONDANT]" et _T par L"" est ça va marcher, l'affichage du string Unicode + variable est réglé
Mais la j'ai des difficulté a remplir une string Unicode !!!
je sais pas pour quoi ça marche pas !!!
Je veux compare deux string Unicode par strcmp()
string a
string b
a = "\u0623" ( أ )
b = "\u0628" ( ب )
si ( a = b ) faire
messagebox "Oui"
sinon faire
messagebox "Non"
finsi
Je peu pas même remplir string 'a', j'ai tester aussi avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 TCHAR a[50]; TCHAR b[50]; a = L"\u0623"; // ou bien _stprintf(a, L"\u0623"); ou a = "\u0623"; b = L"\u0628"; // ou bien _stprintf(b, L"\u0628"); ou b = "\u0628"; if ( strcmp(a, b) == 0 ) MessageBoxW(NULL,L"Oui",L"Oui",MB_OK|MB_RTLREADING|MB_RIGHT); else MessageBoxW(NULL,L"Non",L"Non",MB_OK|MB_RTLREADING|MB_RIGHT);
_stprintf(a, L"\u0623");
a = "\u0623";
je get erreur:
identifier expected.
ou
incompatible types for redefinition of 'a'.
Plutôt que de t'obstiner à utiliser un compilateur qui visiblement ne répond pas à tes attentes, pourquoi ne pas te tourner vers un autre compilateur?
En effet. L"" N'est pas approprié quand on appelle des fonctions TCHAR.
Que se passe-t-il si tu utilises TEXT() à la place de _T() ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager