Приведение int к char в java - я должен использовать ASCII? - PullRequest
1 голос
/ 21 ноября 2010

В: При приведении int к типу char в Java кажется, что результатом по умолчанию является символ ASCII, соответствующий этому значению int.У меня вопрос, есть ли какой-то способ указать другой набор символов, который будет использоваться при приведении?

(Справочная информация: я работаю над проектом, в котором я читаю строку двоичных символов, преобразую еев чанки, и преобразовать чанки в их значения в десятичных, целых числах, которые я затем преобразую в символы. Затем мне нужно иметь возможность «развернуть» полученные сжатые символы обратно в двоичный, изменив процесс на обратный.это, но в настоящее время я смог только сжать до 6 «битов» в один символ, потому что, когда я допускаю большие суммы, в диапазоне есть некоторые значения, которые, похоже, плохо обрабатываются ASCII, они становятсяполя или вопросительные знаки, и когда они преобразуются обратно в int, их первоначальное значение не сохраняется. Если бы я мог использовать другой набор символов, я бы мог избежать этой проблемы и сжать двоичный файл на 8 бит за раз, чтомоя цель.)

Я надеюсь, что это было ясно, и спасибо заранее!

Ответы [ 4 ]

3 голосов
/ 21 ноября 2010

Ваша проблема не имеет ничего общего с ASCII или наборами символов.

В Java char - это просто 16-разрядное целое число.При приведении целых чисел (которые являются 32-разрядными целыми числами) к символам единственное, что вы делаете, - это сохраняете 16 младших значащих битов int и отбрасываете старшие 16 бит.Это называется сужающим преобразованием .

Список литературы:

1 голос
/ 21 ноября 2010

Преобразование между символами и целыми числами использует значения Unicode , из которых ASCII является подмножеством. Если вы обрабатываете двоичные данные, вам следует избегать символов и строк и использовать вместо этого целочисленный массив - обратите внимание, что в Java нет 8-разрядных целых чисел без знака.

0 голосов
/ 22 ноября 2010

Я работаю над проектом, в котором я читать в строке двоичных символов, преобразовать его в куски, и преобразовать куски в свои ценности в десятичные, целочисленные, которые я затем приведу как символы. Тогда мне нужно уметь «расширить» полученное сжатое символы обратно в двоичную, изменив процесс.

Вы не упоминаете , почему вы это делаете, и (если честно) немного трудно следовать тому, что вы пытаетесь описать (во-первых, я не понимаю, почему результирующие символы будут «сжаты» любым способом.

Если вы просто хотите представить двоичные данные в виде текста, существует множество стандартных способов выполнения этого. Но это звучит так, как будто вы хотите чего-то другого?

0 голосов
/ 21 ноября 2010

То, что вы ищете в не приведении, это преобразование.

Существует конструктор String, который принимает массив байтов и кодировку кодировки.Это должно помочь вам.

...