Хорошо, я приготовил некоторый код для инвертирования шестнадцатеричных символов вокруг как части забавного осуществления, которое я составил.
Вот то, что я имею в данный момент:
#include <stdio.h>
int main() {
char a,b,c;
while (1) {
c = getchar();
if (!feof(stdin)) {
a = c % 16;
b = (c - a) / 16;
c = (a*16) + b;
putchar(c);
}else{break;}
}
return 0;
}
Это работает хорошо на большинство значений. Например, 0xA0 становится 0x0A и т.д...
Однако это не играет хорошо с началом значений с 'F'.
0xF1 становится 0x10
0xFF становится 0xF0
и т.д...
Кто-то может указать на меня в правильное направление?
Вы используете подписанный (на вашем компьютере) тип данных. Переключите его на неподписанный, и он должен работать правильно.
Статические переменные являются общими для всех экземпляров типа.
константные переменные специфичны для каждого отдельного экземпляра типа, но их значения известны и фиксированы во время компиляции, и их нельзя изменить во время выполнения.
в отличие от констант, значения статических переменных могут быть изменены во время выполнения.
-121--971473- Можно использовать функцию time
модуля strptime ()
:
import time
date = input('Date (mm/dd/yyyy): ')
try:
valid_date = time.strptime(date, '%m/%d/%Y')
except ValueError:
print('Invalid date!')
Обратите внимание, что в Python 2 .x необходимо использовать raw _ input
вместо input
.
Если символ подписан в вашей системе, то если верхняя кромка c равна f, c отрицательна, а c% 16 даст отрицательный результат.
Я не знаю, почему кто-то выполняет операции *, /,%, в то время как простые побитовые операции могут делать такие вещи.
a = (c & 0x0F) << 4;
b = (c & 0xF0) >> 4;
c = a | b;
getchar
и putchar
возвращают и принимают int
s. Даже лучше, чем это, они используют значение char
, приведенное к unsigned char
, что означает, что для всех допустимых символов putchar
вернет положительное значение. Это необходимо для вашего алгоритма, поскольку вы используете %
, и в противном случае вам пришлось бы полагаться на поведение, определяемое реализацией.
Если вы присвоите значение getchar
int
, то вы можете проверить, не удалось ли чтение по какой-либо причине (а не только в конце потока), сравнив его с EOF. Тогда использование feof
не обязательно - раньше этого было недостаточно.
Например.
int main(void) {
int c;
while ((c = getchar()) != EOF) {
/* algorithm goes here */
putchar(c);
}
return 0;
}