Страницы

Поиск по вопросам

Показаны сообщения с ярлыком конвертация. Показать все сообщения
Показаны сообщения с ярлыком конвертация. Показать все сообщения

понедельник, 3 февраля 2020 г.

Как конвертировать файлы .java в файлы .kt?

#java #android #intellij_idea #конвертация #kotlin


Прочитал тут habrahabr.ru/company/JetBrains/blog/231525 статью. Там написано, что
просто конвертируется. Но в IDEA не нашёл меню, отвечающего за конвертацию. Как осуществить это?
    


Ответы

Ответ 1



Необходимо выполнить действие "Convert Java File to Kotlin File". Это можно сделать несколькими способами: Выполняем действие "Find Action" Ctrl+Shift+A и набираем имя действия. Также эта опция доступна в меню "Code | Convert Java File to Kotlin File". Естественно у вас должен быть установлен плагин Kotlin, либо используйте Intellij IDEA 15, в которой этот плагин предоставляется "из коробки"

Ответ 2



Здесь есть подробный урок о переходе на Kotlin: http://java-help.ru/kotlin-introduction/

воскресенье, 2 февраля 2020 г.

Не получается конвертировать Integer в String

#java #строки #конвертация


Есть класс для работы с параметрами сетевых запросов

public class NeboParameters extends LinkedHashMap implements Serializable {

public NeboParameters() {
    super();
}

public NeboParameters(Map fromMap) {
    super(fromMap);
}

public static NeboParameters from(Object... params) {
    if (params.length % 2 != 0) {
        throw new IllegalStateException("Params must be paired");
    }
    LinkedHashMap result = new LinkedHashMap<>(params.length / 2);
    for (int i = 0; i + 1 < params.length; i += 2) {
        result.put((String) params[i], (String) params[i + 1]);
    }
    return new NeboParameters(result);
}
}


Все значения должны конвертироваться в String. 

Вот пример

NeboParameters params = NeboParameters.from(NeboConst.USER_ID, 3484192, NeboConst.MESSAGE,
"Тест2");


Значение 3484192 не конвертируется в String

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

    


Ответы

Ответ 1



Чтобы привести объект к строке, используйте метод String.valueOf: Object[] params = { 3484192, true }; for (Object obj : params) { System.out.println(String.valueOf(obj)); } Или, если уверены в том, что объекты не равны null, напрямую метод toString: Object[] params = { 3484192, true }; for (Object obj : params) { System.out.println(obj.toString()); }

пятница, 24 января 2020 г.

Сравнение данных с вводом в R и Python

#python #r #конвертация


Доброго времени суток. Учу python ну и собственно хочу перевести код с R и очень
интересует следующий вопрос: Как удобнее всего было бы реализовать сравнение данных
из таблицы excel с критериями, которые вводятся в скрипте, как это сделано в скрипте R?

    a <- as.numeric(readline(prompt="Введите количество рабочих на вашем предприятии:
1, если меньше 8,5 тыс.чел, 2 в противном случае: "))
    b<-as.numeric(readline(prompt="Введите тип вашей индустрии: 2, если высокодоходная,
1 в противном случае: "))
    c<-as.numeric(readline(prompt="Введите производительность труда вашего предприятия
в тыс. руб./чел: "))
    d<-as.numeric(readline(prompt="Введите рентабельность компании в %: "))
    e<-as.numeric(readline(prompt="Введите темп роста компании в %: "))
    tryCatch(
      { localenv <- environment()
      asde<-work_file[as.numeric(work_file$WORKER)==a & as.numeric(work_file$OTRASL)==b
& (work_file$PROISVOD>c-500 & work_file$PROISVODd/100-0.2
& work_file$RENTABe/100-0.3 & work_file$TEMP


Ответы

Ответ 1



Начать можно с такого варианта: import pandas as pd url = r'd:/download/data.xlsx' # читаем Excel в Pandas DataFrame df = pd.read_excel(url) # это нужно будет переделать на ввод текста # или можно читать это из другого CSV/Excel файла a = 1 b = 1 c = 1000 d = 50 e = 80 # query ... qry = ''' WORKER == @a & \ OTRASL == @b & \ PROISVOD > @c-500 & PROISVOD < @c+500 & \ RENTAB > @d/100-0.2 & RENTAB < @d/100+0.2 & \ TEMP > @e/100-0.3 & TEMP < @e/100+0.3 \ ''' print(df.query(qry)) Output: КОМП НОМЕР REAL TEMP RENTAB PROISVOD OTRASL WORKER 25 Башнефть 18 36948.0 0.833 0.329 838.1 1 1 112 Норильск 6 134617.0 0.878 0.394 1402.1 1 1

понедельник, 30 декабря 2019 г.

C#: преобразовать строку в массив байтов

#c_sharp #конвертация #hex


Есть строка "612345". HEX-editor преобразует ее в следующий массив: {36 31 32 33
34 35 36}. Я хочу добавить эти значения (т.е. 36,31,...36) в массив байтов:

byte[] t = {0x36, 0x31, 0x32 ... 0x36}


только не хардкорно, а программно.

Я добился того, что в строке уже есть HEX-значения: "36 31 32 33 34 35 36" теперь
надо как-то добавить перед каждым "0х" и добавить в массив. Подскажите, как это сделать!
    


Ответы

Ответ 1



Так должно сработать: var s = "36 31 32 33 34 35 36"; var bytes = s.Split(' ').Select(_ => int.Parse(_, NumberStyles.HexNumber));

Ответ 2



Чтобы получить массив байт по строке, нужно воспользоваться методом Encoding.GetByteshttps://msdn.microsoft.com/en-us/library/system.text.encoding.getbytes%28v=vs.110%29.aspx Судя по значениям, тебе подойдёт ASCIIEncoding (учти, что не все символы в ней представимы) и UTF8Encoding. Учти, что .NET использует UnicodeEncoding (она же UTF16) для хранения строк, и любые преобразования не всегда однозначны, хотя well-formed строку в UTF16 можно привести в UTF8 и наоборот. Про ASCII даже такое утверждение неверно. https://msdn.microsoft.com/en-us/library/system.text.asciiencoding(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.text.utf8encoding(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.text.unicodeencoding(v=vs.110).aspx Если ты хочешь получить генерацию кода, просто примени к массиву байт Select с приведением в 16ричную систему счисления в нужном виде и String.Join для объединения в строку.

Ответ 3



Преобразование строки в массив байт: // ожидает строку без пробелов, "612345" public static byte[] StringToByteArray(String hex) { int NumberChars = hex.Length; byte[] bytes = new byte[NumberChars / 2]; for (int i = 0; i < NumberChars; i += 2) bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16); return bytes; } Обратное преобразование: public static string ByteArrayToString(byte[] ba) { StringBuilder hex = new StringBuilder(ba.Length * 2); foreach (byte b in ba) hex.AppendFormat("{0:x2}", b); return hex.ToString(); } или public static string ByteArrayToString(byte[] ba) { string hex = BitConverter.ToString(ba); return hex.Replace("-",""); } оригинальный ответ на enSO

Ответ 4



byte[] str = Encoding.Default.GetBytes("Hello world"); самый простой способ

вторник, 24 декабря 2019 г.

Конвертация изображения png в jpg C#

#c_sharp #изображения #png #конвертация #jpeg


Здравствуйте. Есть изображение в формате png. Как его правильно переконвертировать
в jpg / jpeg ?
Я делаю это так:

Image bmp = new Bitmap(path); //путь к картинке
bmp.Save(filename, ImageFormat.Jpeg);


Но мне почему-то кажется, что это слишком просто и в случае чего моя конвертация
пройдет "криво"... 
    


Ответы

Ответ 1



В целом ты все делаешь так, только можно бы добавить еще степень сжатия. Bitmap bmp1 = new Bitmap(@"c:\TestPhoto.jpg"); ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; EncoderParameters myEncoderParameters = new EncoderParameters(1); myEncoderParameter = new EncoderParameter(myEncoder, 100L);//100L - сжатие. Можно выставить 0L myEncoderParameters.Param[0] = myEncoderParameter; bmp1.Save(@"c:\TestPhotoQualityHundred.jpg", jgpEncoder, myEncoderParameters);

Ответ 2



class Program { static void Main(string[] args) { // Загружаем картинку. System.Drawing.Image image1 = System.Drawing.Image.FromFile(path); //Сохраняем в JPEG . image1.Save(@"C:\image_xxx.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); } }

четверг, 5 декабря 2019 г.

Неявное приведение типов в Java

#java #типы #конвертация


Учу Java, читаю Шилдта. Уже много раз прочитал, что Java — сильно типизированный
язык. Почему следующий код выкидывает ошибку

int i = 10;
i = i / 2.5;


А такой код прекрасно работает и присваивает к i значение 4?

int i = 10;
i /= 2.5;

    


Ответы

Ответ 1



Так работает оператор присваивания, если переменная типа int, а i / 2.5 типа double, то вы не можете присвоить значение типа double к типу int без явного каста. То есть проверка типов осуществляется перед присваиванием переменной значения. Во втором случае утверждение является выражением, в котором значение преобразовывается к типу операнда, то есть чтобы можно было осуществить операцию и обратно к типу переменной, где должно хранится значение. То есть int i = 10; d = i /= 2.5; тоже будет работать, поскольку нначения int преобразовавыются к double перед присваиванием без потери точности, обратное не верно и вызывает ошибку.

Ответ 2



операция типа i /= 2.5; это операция с автоматическим приведением типов, будет записана как i = (int) i/2.5; тоже самое с double d = 1d; int i = 1; i = i * d; // ошибка i *= d; // нет ошибки с операциями инкрементации и декрементации анологичная ситуация.

воскресенье, 7 апреля 2019 г.

Как конвертировать файлы .java в файлы .kt?

Прочитал тут habrahabr.ru/company/JetBrains/blog/231525 статью. Там написано, что просто конвертируется. Но в IDEA не нашёл меню, отвечающего за конвертацию. Как осуществить это?


Ответ

Необходимо выполнить действие "Convert Java File to Kotlin File". Это можно сделать несколькими способами:
Выполняем действие "Find Action" Ctrl+Shift+A и набираем имя действия. Также эта опция доступна в меню "Code | Convert Java File to Kotlin File".
Естественно у вас должен быть установлен плагин Kotlin, либо используйте Intellij IDEA 15, в которой этот плагин предоставляется "из коробки"

четверг, 4 апреля 2019 г.

Не получается конвертировать Integer в String

Есть класс для работы с параметрами сетевых запросов
public class NeboParameters extends LinkedHashMap implements Serializable {
public NeboParameters() { super(); }
public NeboParameters(Map fromMap) { super(fromMap); }
public static NeboParameters from(Object... params) { if (params.length % 2 != 0) { throw new IllegalStateException("Params must be paired"); } LinkedHashMap result = new LinkedHashMap<>(params.length / 2); for (int i = 0; i + 1 < params.length; i += 2) { result.put((String) params[i], (String) params[i + 1]); } return new NeboParameters(result); } }
Все значения должны конвертироваться в String.
Вот пример
NeboParameters params = NeboParameters.from(NeboConst.USER_ID, 3484192, NeboConst.MESSAGE, "Тест2");
Значение 3484192 не конвертируется в String
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String


Ответ

Чтобы привести объект к строке, используйте метод String.valueOf
Object[] params = { 3484192, true }; for (Object obj : params) { System.out.println(String.valueOf(obj)); }
Или, если уверены в том, что объекты не равны null, напрямую метод toString
Object[] params = { 3484192, true }; for (Object obj : params) { System.out.println(obj.toString()); }

понедельник, 1 апреля 2019 г.

C#: преобразовать строку в массив байтов

Есть строка "612345". HEX-editor преобразует ее в следующий массив: {36 31 32 33 34 35 36}. Я хочу добавить эти значения (т.е. 36,31,...36) в массив байтов:
byte[] t = {0x36, 0x31, 0x32 ... 0x36}
только не хардкорно, а программно
Я добился того, что в строке уже есть HEX-значения: "36 31 32 33 34 35 36" теперь надо как-то добавить перед каждым "0х" и добавить в массив. Подскажите, как это сделать!


Ответ

Так должно сработать:
var s = "36 31 32 33 34 35 36"; var bytes = s.Split(' ').Select(_ => int.Parse(_, NumberStyles.HexNumber));

четверг, 11 октября 2018 г.

Неявное приведение типов в Java

Учу Java, читаю Шилдта. Уже много раз прочитал, что Java — сильно типизированный язык. Почему следующий код выкидывает ошибку
int i = 10; i = i / 2.5;
А такой код прекрасно работает и присваивает к i значение 4?
int i = 10; i /= 2.5;


Ответ

Так работает оператор присваивания, если переменная типа int, а i / 2.5 типа double, то вы не можете присвоить значение типа double к типу int без явного каста.
То есть проверка типов осуществляется перед присваиванием переменной значения. Во втором случае утверждение является выражением, в котором значение преобразовывается к типу операнда, то есть чтобы можно было осуществить операцию и обратно к типу переменной, где должно хранится значение. То есть
int i = 10; d = i /= 2.5;
тоже будет работать, поскольку нначения int преобразовавыются к double перед присваиванием без потери точности, обратное не верно и вызывает ошибку.