Исходный адрес MAC MAC dest [дубликат]

Старая версия ChromeDriver выделяется при запуске теста; для исправления:

  • Убедитесь, что вы обновили свой браузер (v65-67) и получите последнюю версию исполняемого файла ChromeDriver (v2.38)
  • Извлеките ChromeDriver и явным образом задайте свойство System при инициализации объекта ChromeDriver ...

Пример:

  1. System.setProperty ("webdriver.chrome.driver "," /path/to/chromedriver.exe ");
  2. Драйвер WebDriver = новый ChromeDriver ();
4
задан Jonathan Leffler 27 July 2015 в 06:52
поделиться

7 ответов

const char input[] = "..."; // the value to be converted
char res[9]; // the length of the output string has to be n+1 where n is the number of binary digits to show, in this case 8
res[8] = '\0';
int t = 128; // set this to s^(n-1) where n is the number of binary digits to show, in this case 8
int v = strtol(input, 0, 16); // convert the hex value to a number

while(t) // loop till we're done
{
    strcat(res, t < v ? "1" : "0");
    if(t < v)
        v -= t;
    t /= 2;
}
// res now contains the binary representation of the number

В качестве альтернативы (предполагается, что в "0x3A" нет префикса]:

const char binary[16][5] = {"0000", "0001", "0010", "0011", "0100", ...};
const char digits = "0123456789abcdef";

const char input[] = "..." // input value
char res[1024];
res[0] = '\0';
int p = 0;

while(input[p])
{
    const char *v = strchr(digits, tolower(input[p++]));
    if (v)
        strcat(res, binary[v - digits]);
}
// res now contains the binary representation of the number
2
ответ дан Mario 5 September 2018 в 08:27
поделиться

Это очень просто, потому что перевод идет по цифрам.

0 - 0000
1 - 0001
2 - 0010
3 - 0011
4 - 0100
5 - 0101
6 - 0110
7 - 0111
8 - 1000
9 - 1001
A - 1010
B - 1011
C - 1100
D - 1101
E - 1110
F - 1111

Так, например, шестнадцатеричное число FE2F8 будет 11111110001011111000 в двоичном формате

9
ответ дан Armen Tsirunyan 5 September 2018 в 08:27
поделиться
#include <stdio.h>

int main()
{
    long int binaryNumber,
             hexadecimalNumber = 0,
             j = 1,
             remainder;

    printf("Enter any number any binary number: ");
    scanf("%ld", &binaryNumber);

    while(binaryNumber != 0) {
        remainder = binaryNumber % 10;
        hexadecimalNumber = hexadecimalNumber + remainder * j;
        j = j * 2;
        binaryNumber = binaryNumber / 10;
    }
    printf("Equivalent hexadecimal value: %X", hexadecimalNumber);
    return 0;
}
-3
ответ дан John Pirie 5 September 2018 в 08:27
поделиться

Это моя функция для преобразования HEX в BIN, байт байта.

void HexToBin(char hex_number, char* bit_number) {
    int max = 128;
    for(int i = 7 ; i >-1 ; i--){
        bit_number [i] = (hex_number & max ) ? 1 : 0;
        max >>=1;
    }
}

и вызов функции:

void main (void){

    char hex_number = 0x6E; //0110 1110
    char bit_number[8]={0,0,0,0,0,0,0,0};
    HexToBin(hex_number,bit_number);

    for(int i = 7 ; i >-1 ; i--)
        printf("%d",bit_number[i]);

    printf("\n");
    system("pause");
}

И вот ответ MSDOS:

01101110

Press a key to continue . . .

Довольно легко!

-2
ответ дан Jonathan Leffler 5 September 2018 в 08:27
поделиться

Есть много способов решить этот вопрос, который использует некоторую арифметику для преобразования из диапазонов символов ascii 0-9 и a-f (или A-F) в двоичный файл. Я хотел найти решение, которое использует только таблицу поиска и контрольную таблицу, вместо решения, использующего вместо этого арифметику. Как ни странно, ни один из вышеперечисленных ответов не выполняет чисто арифметическое решение, и некоторые ответы даже предполагают, что «преобразование в двоичный» означает преобразование в строку ascii символов «0» и «1».

Давайте сначала сделаем некоторые настройки. Во-первых, мы хотим иметь все тестовые данные в памяти, чтобы мы избегали диск ввода-вывода, влияющего на тест. Вот как я создаю заголовок с массивом символов «testdata» из 104857600 байт, примерно 105 МБ. Поскольку вопрос заключался в том, как конвертировать файлы, наша реализация должна быть быстрой на больших данных.

$ { printf "char *testdata =\""; cat /dev/urandom \
    | tr -d -c "0123456789abcdefABCDEF" \
    | dd count=100 iflag=fullblock bs=1M; printf "\";\n" } > testdata.h

Затем мы создаем таблицы поиска. Я вижу два возможных способа решения этой проблемы с помощью таблицы поиска. Либо таблица поиска отображает отдельные шестнадцатеричные символы ascii в половину байт или отображает два шестнадцатеричных символа в полный байт. В первом случае таблица поиска должна содержать 256 записей. В последнем случае таблица поиска должна иметь 256 * 256 = 65536 записей. Мы можем уменьшить размер последнего, осознав, что первый бит первого байта никогда не будет использоваться. Поэтому нам нужна только таблица поиска 128 * 256 = 32768 записей. Поскольку для этого решения также требуется дополнительный шаг вычисления (с использованием битовой маски), мы будем сравнивать оба. В результате мы получаем следующие тестовые примеры:

  1. арифметическое решение
  2. таблица поиска в 256 записей
  3. 32768 таблица поиска записей
  4. 65536 таблица поиска записей

Первая таблица поиска легко сгенерирована с использованием некоторого python:

#!/usr/bin/env python

import sys,struct

sys.stdout.write("unsigned char base16_decoding_table1[256] = {\n")

for i in xrange(256):
    try:
        j = str(int(chr(i), 16))
    except:
        j = '0'
    sys.stdout.write(j+',')
sys.stdout.write("};\n")

sys.stdout.write("\n")

l = 128*256*["0"]

for a in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F']:
    for b in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F']:
        l[struct.unpack("<H", a+b)[0]] = str(int(a+b, 16))

line = "unsigned char base16_decoding_table2[%d] = {"%(128*256)

for e in l:
    line += e+","
    if len(line) > 70:
        sys.stdout.write(line+"\n")
        line = ""
sys.stdout.write(line+"};\n")

sys.stdout.write("\n")

l = 256*256*["0"]

for a in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F']:
    for b in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F']:
        l[struct.unpack("<H", a+b)[0]] = str(int(a+b, 16))

line = "unsigned char base16_decoding_table3[%d] = {"%(256*256)

for e in l:
    line += e+","
    if len(line) > 70:
        sys.stdout.write(line+"\n")
        line = ""
sys.stdout.write(line+"};\n")

И затем:

python gen.py > base16_decoding_table.h

Теперь мы можем написать код C для тестирования.

#include <stdio.h>
#include <time.h>
#include <inttypes.h>

#include "testdata.h"
#include "base16_decoding_table.h"

#define TESTDATALEN 104857600

/* the resulting binary string is half the size of the input hex string
 * because every two hex characters map to one byte */
unsigned char result[TESTDATALEN/2];

void test1()
{
    size_t i;
    char cur;
    unsigned char val;
    for (i = 0; i < TESTDATALEN; i++) {
        cur = testdata[i];
        if (cur >= 97) {
            val = cur - 97 + 10;
        } else if (cur >= 65) {
            val = cur - 65 + 10;
        } else {
            val = cur - 48;
        }
        /* even characters are the first half, odd characters the second half
         * of the current output byte */
        if (i%2 == 0) {
            result[i/2] = val << 4;
        } else {
            result[i/2] |= val;
        }
    }
}

void test2()
{
    size_t i;
    char cur;
    unsigned char val;
    for (i = 0; i < TESTDATALEN; i++) {
        cur = testdata[i];
        val = base16_decoding_table1[(int)cur];
        /* even characters are the first half, odd characters the second half
         * of the current output byte */
        if (i%2 == 0) {
            result[i/2] = val << 4;
        } else {
            result[i/2] |= val;
        }
    }
}

void test3()
{
    size_t i;
    uint16_t *cur;
    unsigned char val;
    for (i = 0; i < TESTDATALEN; i+=2) {
        cur = (uint16_t*)(testdata+i);
        // apply bitmask to make sure that the first bit is zero
        val = base16_decoding_table2[*cur & 0x7fff];
        result[i/2] = val;
    }
}

void test4()
{
    size_t i;
    uint16_t *cur;
    unsigned char val;
    for (i = 0; i < TESTDATALEN; i+=2) {
        cur = (uint16_t*)(testdata+i);
        val = base16_decoding_table3[*cur];
        result[i/2] = val;
    }
}

#define NUMTESTS 1000

int main() {
    struct timespec before, after;
    unsigned long long checksum;
    int i;
    double elapsed;

    clock_gettime(CLOCK_MONOTONIC, &before);
    for (i = 0; i < NUMTESTS; i++) {
        test1();
    }
    clock_gettime(CLOCK_MONOTONIC, &after);

    checksum = 0;
    for (i = 0; i < TESTDATALEN/2; i++) {
        checksum += result[i];
    }
    printf("checksum: %llu\n", checksum);
    elapsed = difftime(after.tv_sec, before.tv_sec) + (after.tv_nsec - before.tv_nsec)/1.0e9;
    printf("arithmetic solution took %f seconds\n", elapsed);

    clock_gettime(CLOCK_MONOTONIC, &before);
    for (i = 0; i < NUMTESTS; i++) {
        test2();
    }
    clock_gettime(CLOCK_MONOTONIC, &after);

    checksum = 0;
    for (i = 0; i < TESTDATALEN/2; i++) {
        checksum += result[i];
    }
    printf("checksum: %llu\n", checksum);
    elapsed = difftime(after.tv_sec, before.tv_sec) + (after.tv_nsec - before.tv_nsec)/1.0e9;
    printf("256 entries table took %f seconds\n", elapsed);

    clock_gettime(CLOCK_MONOTONIC, &before);
    for (i = 0; i < NUMTESTS; i++) {
        test3();
    }
    clock_gettime(CLOCK_MONOTONIC, &after);

    checksum = 0;
    for (i = 0; i < TESTDATALEN/2; i++) {
        checksum += result[i];
    }
    printf("checksum: %llu\n", checksum);
    elapsed = difftime(after.tv_sec, before.tv_sec) + (after.tv_nsec - before.tv_nsec)/1.0e9;
    printf("32768 entries table took %f seconds\n", elapsed);

    clock_gettime(CLOCK_MONOTONIC, &before);
    for (i = 0; i < NUMTESTS; i++) {
        test4();
    }
    clock_gettime(CLOCK_MONOTONIC, &after);

    checksum = 0;
    for (i = 0; i < TESTDATALEN/2; i++) {
        checksum += result[i];
    }
    printf("checksum: %llu\n", checksum);
    elapsed = difftime(after.tv_sec, before.tv_sec) + (after.tv_nsec - before.tv_nsec)/1.0e9;
    printf("65536 entries table took %f seconds\n", elapsed);

    return 0;
}

Давайте скомпилируем вещь:

$ gcc -O3 -g -Wall -Wextra test.c

И запустите ее:

$ ./a.out

результат:

  1. арифметическое решение: 437.17 с
  2. Таблица поиска в 256 записей: 117.80 с
  3. 32768 таблица поиска записей: 52.33 с
  4. 65536 таблица поиска записей: 44,66 с

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

1
ответ дан josch 5 September 2018 в 08:27
поделиться
void printBin(unsigned int num){
  char str[sizeof(num)*8];
  char *p = str;
  for(*p='0'; num; num/=2) { *p++='0'+num%2; } //store remainders
  for(--p; p>=str; putchar(*p--)) {;}          //print remainders in reverse
  putchar('\n');
}
-1
ответ дан PSkocik 5 September 2018 в 08:27
поделиться
void hex_binary(char * res){
char binary[16][5] = {"0000", "0001", "0010", "0011", "0100", "0101","0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110","1111"};
char digits [] = "0123456789abcdef";

const char input[] = "a9e6"; // input value
res[0] = '\0';
int p = 0;
int value =0;
    while(input[p])
    {
        const char *v = strchr(digits, tolower(input[p]));
        if(v[0]>96){
            value=v[0]-87;
        }
        else{
            value=v[0]-48;
        }
        if (v){
            strcat(res, binary[value]);
        }
        p++;
    }
    printf("Res:%s\n", res);
}
0
ответ дан Will 5 September 2018 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: