![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Dek |
|
|||
|
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 |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 8 Всего: 48 |
Попробуй такую штуку
Кроме того есть класс java.lang.Character для работы с символами. Кстати для чего все эти ухищрения? Может можно все решить проще? -------------------- Account removed |
|||
|
||||
| Dek |
|
|||
|
Unregistered |
Конечно, скорей всего, есть более простые методы. Но я их не знаю - А задача такова надо перед посылкой последовательности байтов посылать их длину, состоящую из 4 байтов. Я, как новичок в Java, нашел только такой метод. Можете предложить более простое решение?
Но длина должна быть не как символ, т.е. если она равна 5, то должен быть и ascii-символ 0х05, а не 0х35. Эти 4 байта должны иметь вид 0х05_0х00_0х00_0х00 и именно в такой последовательности. ICQ - 151009035 |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 8 Всего: 48 |
А куда посылаются байты? Может не связываться с char (это все-таки 2-байтовые символы в Unicode кодировке и с ними C-шные операции проводить не так просто), а использовать байтовые массивы?
Если ты формируешь пакеты для посылки на устройство (или файл), совсем не обязательно делать это вручную. Наверняка существуют библиотеки для работы с данным устройством/файлом. -------------------- Account removed |
|||
|
||||
| Dek |
|
|||
|
Unregistered |
Это работа с сокетом. Разве в Javа нет какого-то подобия форматному выводу в строковую переменную (как C-шный sprintf)?
|
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 8 Всего: 48 |
В стандартных бибилотеках 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 |
|||
|
||||
| Dek |
|
|||
|
Unregistered |
огромное спасибо! Все получилось с помощью write (byte[], int, int).
Руслан |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |