2014-02-13 4 views
1

Я хотел бы объединить шестнадцатеричное значение и строку с использованием JavaScript.Объединение шестнадцатеричных байтов и строк в JavaScript при сохранении байтов

var hexValue = 0x89; 
var png = "PNG"; 

Строка "PNG" эквивалентно конкатенации 0x50, 0x4E и 0x47.

Конкатенации hexValue и png через

var concatHex = String.fromCharCode(0x89) + String.fromCharCode(0x50) 
       + String.fromCharCode(0x4E) + String.fromCharCode(0x47); 

... дать результат с числом байт 5 из первых шестнадцатиричных нуждающихся управляющего символом:

C2 89 50 4E 47 

Я работаю с данные исходного изображения, где у меня есть hexValue и png, и их необходимо объединить без включенного управляющего символа.

  1. Есть ли способ обрезать контрольный символ?
  2. Учитывая, что у меня есть массив байтов, есть ли лучший способ их конкатенации и строка, сохраняя байты?
+0

Я знаю, это звучит странно, но посмотрите на старый пример использования двоичного ajax в firefox 3, и вы найдете код цикла, который вам нужен ... – dandavis

+0

@dandavis, есть ли у вас ссылка на это? У меня уже есть мой гекс и струны как вары. –

+0

@ Ваша строка в кодировке utf8 правильно? – emcas88

ответ

0

Ну, я исследовал, и я обнаружил, что в javascript для достижения этого эффективно используются типизированные массивы JavaScript.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays

http://msdn.microsoft.com/en-us/library/br212485(v=vs.94).aspx

Здесь я написал код (не проверено), чтобы выполнить то, что вы хотите:

var png = "PNG"; 
var hexValue = 0x89; 
var lenInBytes = (png.Length + 1) * 8; //left an extra space to concat hexValue 

var buffer = new ArrayBuffer(lenInBytes); //create chunk of memory whose bytes are all pre-initialized to 0 
var int8View = new Int8Array(buffer); //treat this memory like int8 

for(int i = 0; i < png.Length ; i++) 
    int8View[i] = png[i] //here convert the png[i] to bytes 

//at this point we have the string png as array of bytes 

    int8View[png.Length] = hexValue //here the concatenation is performed 

Ну надеюсь, что это помогает.

Смежные вопросы