Есть string значения '99999999' как записать это как байт в переменную byte=0x99 пример: String a='999999'; String b='0x'; String c='0x'; String d='0x'; String e='0x'; b+=a[0]+a[1]; c+=a[2]+a[3]; d+=a[4]+a[5]; e+=a[6]+a[7]; Byte ab=b; Byte bb=c; Byte cb=d; Byte db=e;
А чего в него смотреть, там из строки, состоящей из 6 байтов, вытаскивают все восемь. Я же говорю - никак
Есть массив arr значения в байтах пример Byte arr{1,2,3,4}; Нужно записат вот так данные String a='12345678'; String b='0x'; String c='0x'; String d='0x'; String e='0x'; b+=a[0]+a[1]; c+=a[2]+a[3]; d+=a[4]+a[5]; e+=a[6]+a[7]; Byte arr[1]=b; Byte arr[2]=c; Byte arr[3]=d; Byte arr[4]=e; Вот так должен выглядеть Arr[3] Значение 0х56
так и не стало понятнее что надо ТСу. И язык какой-то непонятый - джаваскрип чтоль? я только си котирую. я вот так сделал посредством strtol() Код (C++): #include <stdio.h> #include <stdlib.h> #include <string.h> char isdigit(char c){//функция определяет является ли знак 16-ричной цифрой if((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F')){ return 1; }else {return 0;} } char a[]="012zzz345678abCDeF000011";//исходный нультерменированный массив int len;//переменная для хренения длинн массивов char nom[2];//массив под две цифры int main() { len=strlen(a);//определяем длину исходного массива printf("%s l=%d\n",a,len);//печатаем исходный массив и его длину int i,j; for(i=0,j=0;i<=len;i++,j++){//убираем из массива все нецифры while(!isdigit(a[i])&&i<len){ i++; } a[j]=a[i]; } len=strlen(a);//определяем длину почищенного массива printf("%s l=%d\n",a,len);//печатаем массив и длину после чистки //создаем выходной массив в 2 раза меньше исходного char Arr[len/2+1]; for(i=0,j=0;i<len;i+=2,j++){ nom[0]=a[i];//во вспомогательный массив вносим nom[1]=a[i+1];//цифры попарно char *endp;//надо создать этот указатель чтоб работало strtol() //посредством strtol() набиваем в выходной массив значения в 16-ричном формате: Arr[j]=(char)strtol(nom,&endp,16); } Arr[j]=0;//ставим в конец выходного массива ноль //определяем длину выходного массива len=j; //не strlen() чтобы не оборвалось если в середине есть нули printf("lout=%d\n",len); //печатаем выходной массив поячеечно в формате беззнакового хекса for(i=0;i<len;i++){ printf("%02X\n",(unsigned char)Arr[i]); } return 0; } не факт что это лучшее решение, но вроде работает. Добавил удаление лишних символов (не циферных). Если длина строки нечетная, то последняя цифра становится 0x0N возможны баги
akl, открой для себя стандартную функцию isHexadecimalDigit(), или лучше isxdigit(); вместо Код (C++): char isdigit(char c){//функция определяет является ли знак 16-ричной цифрой if((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F')){ return 1; }else {return 0;} } которую тоже, кста, можно сократить до Код (C++): bool isdigit(char c){//функция определяет является ли знак 16-ричной цифрой return ((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F')); }
Судя по коду в первом сообщении, ТС-у на выходе нужно получить вовсе не строчки Перевожу его задачку на русский Взять строчку "12345678", интерпретировать как число в HEX - то есть 0x12345678 - и далее преобразовать в long и вывести отдельными байтами arr[1] = 0x12 arr[2] = 0x34 ... и так далее
ну я типа почти так и сделал, только корявенько, но зато строчка может быть любой длины. Другое дело что у меня это на си, а ТСу надо на джаваскрипт или типа того. но по идее это задачка начального уровня, ему надо только нагуглить похожие функции подходящие, наверняка их много
Если смотреть этот код: 1) массив nom - размер массива 2. Нужно 3, в третий - 0 (конец строки) Иначе еcли в памяти в следующем элементе случайно будет символ '0'-"9' или 'A'-F' он тоже будет конвертироваться как исходная строка. 2) Arr[j]=0 - не нужен, там не строка. Наверное имелось в виду про 0 к nom? Если нам не нужен указатель на непреобразованные символы - можно 0 передать и не создавать указатель. Внутри функции есть проверка на 0, если не ноль - то только тогда в него будет записан адрес первого, не цифрового, символа.