У меня есть устройство H/W, которое обычно использует последовательный порт для интерфейса, отправляя и получая двоичные сообщения к ПК программа UI. Я добавил порт Ethernet и маленький стек TCP/IP с маленьким веб-сервером, который я хочу использовать для замены последовательного порта UI веб-браузером UI.
Сообщения являются главным образом видом запроса/ответа вещей, но для некоторых веб-страниц мне, возможно, понадобятся к Tx/Rx два или больше сообщения для получения всей информации, в которой я нуждаюсь для страницы. Я буду использовать AJAX XMLHttpRequest (), чтобы отправить сообщения и получить ответы для страницы.
Устройство H/W имеет ограниченные ресурсы (ЦП и RAM) так для хранения этого простым на том конце, я хочу просто сделать немного интерфейса CGI, который берет исходящие сообщения и кодирует их ШЕСТНАДЦАТЕРИЧНЫМ ASCII (т.е. двумя ШЕСТНАДЦАТЕРИЧНЫМИ символами/байт ASCII) для отправки к браузеру, который будет использовать некоторый сценарий Java, чтобы выбрать независимо сообщения в поля и преобразовать их в числовой Вар и отобразить их пользователю. То же для сообщений, отправленных с браузера на устройство H/W.
Сообщения содержат смесь типов поля, подписанных и неподписанных байтов, коротких замыканий, longs, плаваний, и являются далее сложными путем нахождения главным образом в прямом порядке байтов в сообщениях.
Я могу обработать код конца H/W, но я изо всех сил пытаюсь изучить сценарий Java и мог использовать справку с функцией для перевода ШЕСТНАДЦАТЕРИЧНОГО ASCII <-> численные данные на конце браузера.
Какие-либо идеи? Какой-либо пример кода некоторые, где?
Спасибо, Paul
Звучит так, как будто вы хотите разобрать
. Он занимает строку и необязательный радикс (который всегда должен быть задан), и разбирает число как целое число в этом радиксе (или радикс, основанный на формате числа, если оно не задано, поэтому вы должны всегда задавать его; люди удивляются, когда обнаруживают, что parseInt("010")
возвращает 8
).
> parseInt("ab", 16)
171
Для обратного преобразования в шестнадцатеричный вы можете использовать toString
:
> var num = 16
> num.toString(16)
"10"
Обратите внимание, что вам придется самим разбивать его на два символа, если он выйдет только как один:
> num = 5
> num.toString(16)
"5"
Мне было скучно, поэтому я написал несколько функций для выполнения преобразования в обоих направлениях для вас:
function parseHexString(str) {
var result = [];
// Ignore any trailing single digit; I don't know what your needs
// are for this case, so you may want to throw an error or convert
// the lone digit depending on your needs.
while (str.length >= 2) {
result.push(parseInt(str.substring(0, 2), 16));
str = str.substring(2, str.length);
}
return result;
}
function createHexString(arr) {
var result = "";
for (i in arr) {
var str = arr[i].toString(16);
// Pad to two digits, truncate to last two if too long. Again,
// I'm not sure what your needs are for the case, you may want
// to handle errors in some other way.
str = str.length == 0 ? "00" :
str.length == 1 ? "0" + str :
str.length == 2 ? str :
str.substring(str.length-2, str.length);
result += str;
}
return result;
}
Которые можно использовать следующим образом:
> parseHexString("abcd100001")
[171, 205, 16, 0, 1]
> createHexString([0, 1, 2, 10, 20, 100, 200, 255, 1000, 2000])
"0001020a1464c8ffe8d0"
> parseHexString(createHexString([0, 1, 2, 10, 20, 100, 200, 255, 1000, 2000]))
[0, 1, 2, 10, 20, 100, 200, 255, 232, 208]
Вы ищете функцию parseInt()
:
x = "0xff";
y = parseInt(x, 16);
alert(y); //255
]Вы искали что-то вроде этих 2-х функций?[
] [<html>
<head>
<script type="text/javascript">
function hex2Decimal( hex )
{
return parseInt("0x"+hex);
}
function decimal2Hex( num )
{
return num.toString(16);
}
</script>
</head>
<body>
<script type="text/javascript">
document.write(hex2Decimal("A") + "<br />");
document.write(decimal2Hex(16) + "<br />");
</script>
</body>
</html>
]