Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> char = конкатенации 2 байтов? как создать сhar состояший из 2 байтов 
:(
    Опции темы
Dek
  Дата 27.9.2002, 19:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Надо перевести С-код на Java. Там было так:
char ch[10];
int digit;

sprintf (ch, "%04x", 0x0);
digit=4;
ch[0]=digit & 0xFF;
ch[1]=(digit>>8) & 0xFF;
ch[2]=(digit>>16) & 0xFF;
ch[3]=(digit>>24) & 0xFF;

Теперь надо получить эту же строку ch в Java. Я предполагаю собрать строку из 2 char. Т.е.
char [] c = new char [2];
byte [] b = new byte [2];

b[0]=digit & 0xFF;
b[1]=(digit>>8) & 0xFF;
b[2]=(digit>>16) & 0xFF;
b[3]=(digit>>24) & 0xFF;
//c[0] должен быть конкатенацией b[0] и b[1]
//c[1] должен быть конкатенацией b[2] и b[3]
String ch= new String ©;
Кто может подсказать как эту конкатенацию осуществить?
Заранее благодарен.
  Вверх
Sun
Дата 27.9.2002, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: 8
Всего: 48



Попробуй такую штуку
Код

c[0] = (char)(b[1]*0x100+b[0]);
c[1] = (char)(b[3]*0x100+b[2]);

Кроме того есть класс java.lang.Character для работы с символами. Кстати для чего все эти ухищрения? Может можно все решить проще?  :)


--------------------
Account removed
PM MAIL   Вверх
Dek
Дата 27.9.2002, 21:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Конечно, скорей всего, есть более простые методы. Но я их не знаю - А задача такова надо перед посылкой последовательности байтов посылать их длину, состоящую из 4 байтов. Я, как новичок в Java, нашел только такой метод. Можете предложить более простое решение?
Но длина должна быть не как символ, т.е. если она равна 5, то должен быть и ascii-символ 0х05, а не 0х35.  Эти 4 байта должны иметь вид 0х05_0х00_0х00_0х00 и именно в такой последовательности.
ICQ - 151009035
  Вверх
Sun
Дата 27.9.2002, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: 8
Всего: 48



А куда посылаются байты? Может не связываться с char (это все-таки 2-байтовые символы в Unicode кодировке и с ними C-шные операции проводить не так просто), а использовать байтовые массивы?
Если ты формируешь пакеты для посылки на устройство (или файл), совсем не обязательно делать это вручную. Наверняка существуют библиотеки для работы с данным устройством/файлом.


--------------------
Account removed
PM MAIL   Вверх
Dek
Дата 28.9.2002, 00:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Это работа с сокетом. Разве в Javа нет какого-то подобия форматному выводу в строковую переменную (как C-шный sprintf)?
  Вверх
Sun
Дата 28.9.2002, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: 8
Всего: 48



Цитата(Guest @ 27.9.2002, 17:15)
Это работа с сокетом. Разве в Javа нет какого-то подобия форматному выводу в строковую переменную (как C-шный sprintf)?

В стандартных бибилотеках Java нет аналога sprintf(). Вместо этого используется оператор "+", который перегружен для всех базовых типов (кстати это единственный класс в Java в котором используется перегрузка операторов). То-есть вместо

sprintf(dest, "some string %i %f7.2 ...", i, f);
надо писать
dest = "some string "+i+" "+f;

А что касается сокетов, то зачем там использовать строки, если можно посылать массивы байтов.

java.net.Socket.write(byte[] b, int off, int len)


--------------------
Account removed
PM MAIL   Вверх
Dek
  Дата 3.10.2002, 01:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











огромное спасибо! Все получилось с помощью write (byte[], int, int).
Руслан
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0419 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.