Задать вопрос
HunterSpy
@HunterSpy
System Analyst / Crypto Enthusiast / Product Owner

C++ CLR работа с char?

Есть простая программа на C++ CLR которая должна выводить символ = номер символа, все делается легко… но старый добрый (char)i не сработал… не беда нашли решение (System::Char)i.


Но System::Char почему от отказывается выводить символы с 128 и далее?

#using <System.dll>

using namespace System;

using namespace System::Threading;

int main()

{

for(int i=120; i<140; i++) Console::WriteLine((char)i+" = "+safe_cast(i)+" = "+(System::Char)i+" = "+i);

Console::ReadLine();

}


Вывод:
f1ba645cf0c1d22d5e9d4b87023565b8.jpg


Понять почему она отказываться выводить символы с индексом более 127 я не смог…


Главный вопрос как вывести символ с индексом более 127?
  • Вопрос задан
  • 3618 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Weageoo
@Weageoo
#include "stdafx.h"
 
using namespace System;
 
void main()
{
System::Text::Encoding^ encoding = System::Text::Encoding::GetEncoding("windows-1251"); // or cp866 ?
 
array<Byte>^ byteArr = gcnew array<Byte>(256);
 
for (int i = 0; i < byteArr->Length; ++i) byteArr[i] = i;
 
array<Char>^ charArr = encoding->GetChars(byteArr);
 
for (int i = 0; i < charArr->Length; ++i)
Console::WriteLine("{0}: {1}", byteArr[i], charArr[i]);
 
Console::ReadKey();
}
Ответ написан
wartur
@wartur
Я помню сталкивался с проблемами C++ CLR года 2-3 назад. Не знаю конкретно эту проблему, но я постоянно сталкивался с проблемами типов. Не бейте сильно, но если мне не изменяет память char в CLR вроде 16 разрядный. Посмотрите в сторону проблем разрядности и совместимости с этим.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы