напрямую используйте char * nib как int hex - PullRequest
0 голосов
/ 20 января 2019

в чистом и переносном виде c.

Поэтому у меня возникают проблемы с приведением того, что должно быть переменной, из переменной.char * nib к int hex.Идея в том, что у меня есть char * nib = "ab";или "0xab" или что-нибудь, что непосредственно представляет два символа в виде символа *.затем приведение его к целому числу.и записать его в файл, чтобы получить запись один на один.поэтому я начинаю с char * nib = "0xab";затем я пишу его как int, предположительно, и в hexdump или edit, и результат просто ab.

Я смог сделать это как константу, прямо объявившую ... но перо всегда статично.

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

Так можете ли вы записать его непосредственно в файл, не конвертируя его?три таблицы поиска кажутся немного значимыми для значения с именем length

1 Ответ

0 голосов
/ 20 января 2019

Невозможно преобразовать 2 символа (2 байта) в один байт, поскольку приведение не изменяет двоичное представление значения.

Самое близкое, что вы можете получить к приведению строки, которая выглядит как шестнадцатеричное к некоторому значению, которое покажет нечто подобное, - это использовать 0-15 символов через escape-последовательность, такую ​​как char* nib = "\x0A\x0B" и приведение (*((short*)nib)) к 2-байтовому значению ( 0x0A0B в этом случае) и сохраните его в файле (я не уверен, что существует portable целочисленный тип 2 байта - short часто имеет ширину 2 байта, но не обязательно должен быть 2 байт). К сожалению, я не думаю, что существует переносимый способ хранения 2-байтового целочисленного значения в файле, поскольку разные архитектуры могут иметь разный порядок байтов.

Запись строковых значений символ за символом, вероятно, самый безопасный подход. Или преобразуйте строку в int a обычным способом и используйте свой собственный код чтения / записи для целых чисел, чтобы обеспечить переносимость.

...