Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 163

 
Nikolai Semko :

hayır, fark ederdim. Bazı durumlarda (Unicode ile çalışırken) bunu dışlamama rağmen, bu mümkündür. Örneğin Java'da char türü 2 bayttır.
Bir kripto borsasındaki verileri iki şekilde ayrıştırmaya çalıştım: bu JSON kitaplığı aracılığıyla ve bir char dizisiyle çalışarak.
Aradaki fark hız olarak 700 (!!!) kat çıktı. şoktaydı. Belki de JSON'un en iyi uygulaması yoktu.


karakter 16LE'dir ve dizeler açıkça pascal'dandır. Bu arada, Fortran'dan diziler

 
Nikolai Semko :

hayır, fark ederdim. Bazı durumlarda (Unicode ile çalışırken) bunu dışlamama rağmen, bu mümkündür. Örneğin Java'da char türü 2 bayttır.
Bir kripto borsasındaki verileri iki şekilde ayrıştırmaya çalıştım: bu JSON kitaplığı aracılığıyla ve bir char dizisiyle çalışarak.
Aradaki fark hız olarak 700 (!!!) kat çıktı. şoktaydı. Belki de JSON'un en iyi uygulaması yoktu.

Bir mql dizesini bir dll'ye geçirirken, dll tarafında, mql dize türü wchar_t* olarak kabul edilir.
Ve tür boyutu uyumsuzluğu yalnızca Java'da bulunmaz, mimarinin türüne bağlıdır, ne olduğunu, işletim sistemini veya donanımı hatırlamıyorum.

700 kez mi? Figase, bu kütüphaneyi JSON ayrıştırması için erteledim, bu yüzden buna değmez mi?
Ve StringToCharArray dizesini çevirmek ve diziyi bir döngüde ayrıştırmak daha mı iyi?

 
Roman :

700 kez mi? Figase, bu kütüphaneyi JSON ayrıştırması için erteledim, bu yüzden buna değmez mi?
Ve StringToCharArray dizesini çevirmek ve diziyi bir döngüde ayrıştırmak daha mı iyi?

Bence evet. Yine de her zaman kontrol etmelisiniz. Ölçüm yapın. Dizelerle çalışma işlevlerinin en iyi şekilde yazılmadığını dışlamıyorum, ancak şimdi düzeltildiler.
Bu ölçüleri bir yıl önce almıştım.

Elbette, char dizileriyle çalışırken daha fazla kod olacak, ancak daha esnek seçenekler olacak.

 
Roman :

Ve büyük olasılıkla mql dizesinin altında kısa[] veya wchar_t[] veya wchar_t* vardır
Sonuçta, mql dizeleri unicode'da ve utf 2 bayttır.
Ve StringToCharArray, short[]'dan char[]'a dönüşür

unicode != utf && utf != 2 bayt (utf utf'y farklı) && MSVC standart değil

wchar_t'nin anlamı, desteklenen herhangi bir karakteri bir wchar_t'ye sığdırmaktır (peki, sizin yolunuzdaki küçük şeyler hakkında) ve G/Ç akışlarının kendileri yerel ayar kodlamasından /'ye dönüşür. Boyut/kodlama garantisi yoktur. dll'de wchar_t kabul ettiğinizde bir düşünün, doğru mu? Eh, tabii ki kum havuzunun ötesine, yetişkinlerin dünyasına bakmak genel olarak ilginçse.

 
Vict :

unicode != utf && utf != 2 bayt (utf utf'y farklı) && MSVC standart değil

wchar_t'nin anlamı, desteklenen herhangi bir karakteri bir wchar_t'ye sığdırmaktır (peki, sizin yolunuzdaki küçük şeyler hakkında) ve G/Ç akışlarının kendileri yerel ayar kodlamasından /'ye dönüşür. Boyut/kodlama garantisi yoktur. dll'de wchar_t kabul ettiğinizde bir düşünün, doğru mu? Eh, tabii ki kum havuzunun ötesine, yetişkinlerin dünyasına bakmak genel olarak ilginçse.

Evet, Unicode ve UTF'nin farklı kodlamalar olduğunu ve teoride farklı olduklarını biliyorum.
Sadece oldu, unicode kelimesini yazmak ve kısaltmak istedim, muhtemelen başarılı olmadı.

Unicode referansı, standardın dünyadaki hemen hemen tüm yazılı dillerden karakterler içerdiğini belirtse de.
Standart iki ana bölümden oluşur: evrensel bir karakter seti (İngilizce Evrensel karakter seti, UCS) ve bir kodlama ailesi (İngilizce Unicode dönüştürme formatı, UTF)

Bu nedenle, sanırım Unicode zaten UTF kodlamaları içeriyor, bu yüzden kelimenin yazılışını kısaltmak için bu şekilde koydum.

Hakkında wchar_t* doğru mu yanlış mı onu bile bilmiyorum.
dll nasıl yazılır makalesinden Renat'ın örneklerinde olanı kullandım.
mql5 dizeleri UTF içeren Unicode'dadır, bu nedenle makale örneğinde wchar_t* öğesinin kullanılmasının mantıklı olduğunu düşünüyorum.
Desteklenen herhangi bir karakteri tek bir wchar_t içine sığdırmak için.

Herhangi bir boyut / kodlama garantisine gelince, bundan haberim bile yoktu, muhtemelen o zaman saflık için * kısa mı kullanıyorsunuz?
Tabii ki MSVC IDE tarafından doğru bir şekilde destekleniyorsa.
Çevre her zamanki doğru yemin ettiğinden ve DOĞRU verin.

 

UTF-8 ve UTF-16 karşılık gelen bitlere sahiptir.

UTF-8 dilinde sayfalar özel kodlarla değiştirilir.

UTF-16, aynı anda tüm karakterleri içerir.

 
Edgar Akhmadeev :

UTF-8 ve UTF-16 karşılık gelen bitlere sahiptir.

UTF-8'de dil sayfaları özel kodlarla değiştirilir.

UTF-16, aynı anda tüm karakterleri içerir.

Pek çok kişinin forumda yazdıklarından anladığım kadarıyla mql5 stringleri sadece UTF-16'da.
Ve mql belgelerinde şunları yazıyorlar:
Metin dizesi, boş ile sonlandırılan bir Unicode karakter dizisidir .
Bu şekil ile mql5 dizesinin ne tür bir kodlamada olduğunu anlayacaksınız.
Ve eğer Unicode zaten tüm UTF ailelerini içeriyorsa, neden o zaman UTF kelimesini kullanıyorsunuz ve kafa karıştırıyorsunuz.
Unicode ve her şey, basit ve net.
Yoksa söylenmeli mi?
UTF-16 bitlik ile Unicode?

Genelde, geliştiricilerden biri bunu içerdi.
mql dize türü iki bölümden oluşur, arabellek 8 bayt ve işaretçi 4 bayt, toplam 12 bayt.

 
Roman :

Evet, Unicode ve UTF'nin farklı kodlamalar olduğunu ve teoride farklı olduklarını biliyorum.
Sadece oldu, unicode kelimesini yazmak ve kısaltmak istedim, muhtemelen başarılı olmadı.

Unicode referansı, standardın dünyadaki hemen hemen tüm yazılı dillerden karakterler içerdiğini belirtse de.
Standart iki ana bölümden oluşur: evrensel bir karakter seti (İngilizce Evrensel karakter seti, UCS) ve bir kodlama ailesi (İngilizce Unicode dönüştürme formatı, UTF)

Bu nedenle, sanırım Unicode zaten UTF kodlamaları içeriyor, bu yüzden kelimenin yazılışını kısaltmak için bu şekilde koydum.

Hakkında wchar_t* doğru mu yanlış mı onu bile bilmiyorum.
dll nasıl yazılır makalesinden Renat'ın örneklerinde olanı kullandım.
mql5 dizeleri UTF içeren Unicode'dadır, bu nedenle makale örneğinde wchar_t* öğesinin kullanılmasının mantıklı olduğunu düşünüyorum.
Desteklenen herhangi bir karakteri tek bir wchar_t içine sığdırmak için.

kafan karıştı. Unicode, kodları olan bir karakter tablosudur, 0-65535'e (2 bayt) sığdığında büyümüştür. Ve karakter başına 4 bayt harcamak kalındır. Burası utf'nin kullanışlı olduğu yer - değişken uzunluk kodlaması (örneğin, utf-8, ASCII karakterlerini bir bayt olarak kodlar). Bu nedenle, Unicode (tablo) herhangi bir utf içermez.

Herhangi bir boyut / kodlama garantisine gelince, bunu bile bilmiyordum, muhtemelen o zaman saflık için * kısa mı kullanıyorsunuz?
Tabii ki MSVC IDE tarafından doğru bir şekilde destekleniyorsa.
Çevre her zamanki doğru yemin ettiğinden ve DOĞRU verin.

char16_t, char32_t, sabit boyutlu tipleri standarda koyarlar. wchar_t'nin farklı bir anlamı vardır.

 
Roman :

Pek çok kişinin forumda yazdıklarından anladığım kadarıyla mql5 stringleri sadece UTF-16'da.
Ve mql belgelerinde şunları yazıyorlar:
Metin dizesi, boş ile sonlandırılan bir Unicode karakter dizisidir .
Bu şekil ile mql5 dizesinin ne tür bir kodlamada olduğunu anlayacaksınız.
Ve eğer Unicode zaten tüm UTF ailelerini içeriyorsa, neden o zaman UTF kelimesini kullanıyorsunuz ve kafa karıştırıyorsunuz.
Unicode ve her şey, basit ve net.
Yoksa söylenmeli mi?
UTF-16 bitlik ile Unicode?

Hepsi bu değil.

ANSI Kiril = CP1251 olarak

Unicode:

UTF-8=CP65001, // UNIX/Linux

UTF-16LE=CP1200, // Pencereler

UTF-16BE=CP1251,

UTF-32LE=?,

UTF-32BE=?,

ISO10646:

UCS-2~UTF-16

UCS-4=UTF-32

Bilinç bulanıklığı, konfüzyon? Hayır, duymadın.

 
Edgar Akhmadeev :

UTF-8 ve UTF-16 karşılık gelen bitlere sahiptir.

UTF-8'de dil sayfaları özel kodlarla değiştirilir.

UTF-16, aynı anda tüm karakterleri içerir.

Hangi kod sayfaları, neden bahsediyorsun? "özel kodlar", bir karakteri kodlamak için bayt sayısını belirler, çünkü değişken uzunluk kodlaması UTF-8, UTF-16'nın herhangi bir Unicode karakterini kodlaması kadar iyidir. Ve değişken uzunluklu utf-16 (vekil çiftler).