|1 2 3|
|4 5 6|
Используйте следующий код для печати значений.
System.out.println(Arrays.deepToString());
Выход будет выглядеть так (вся матрица в одной строке):
[[1,2,3],[4,5,6]]
Это зависит от вашей системы, но если вы хотите извлечь nybbles из вашего значения, вы можете в конечном итоге применить 0xF (маски >> (4 * n)) к вашим значениям. Например, если я получил двоичные данные, выглядящие следующим образом [110 ] и мне нужно извлечь только первую часть этой, которую я мог бы использовать 0xF000 = 1111 0000 0000 0000
с & amp; замаскируйте это 0x4602, чтобы получить первую часть этого значения. Это даст нам
0xF000 = 1111 0000 0000 0000
&0x4602 = 0100 0110 0000 0010
result would be 0x4000 = 0100 0000 0000 0000
, чтобы получить n-ую часть этого значения, которое вы могли бы сместить (0xF000) с >> 4 n раз
.Вам нужно запустить цикл от 0-7, а также переместить число после применения маски, чтобы опустить клев.
for(int i = 0; i < 8; i++){
int temp = (mask & num) >> (28 -4*i);
Первое замечание, касающееся вашего кода без учета проблемы, заключается в том, почему вы хорошо справляетесь с делом 0..9, но отделяете дела A и B ... и F вместо того, чтобы делать то же самое, что вы делаете для цифра?
так
int hexConversion(int num){
char hex_buffer[9];
unsigned int mask = 4026531840;
for(int i = 0; i < 9; i++){
int temp = mask & num;
if(temp < 10){
hex_buffer[i] = temp + '0';
}
else if (temp < 16) {
hex_buffer[i] = temp - 10 + 'A';
}
else {
hex_buffer[i] = '?';
}
mask >>= 4;
}
hex_buffer[8] = '\0';
for(int i = 0; i < sizeof(hex_buffer); i++){
printf("%c", hex_buffer[i]);
}
}
Я добавил тест if (temp < 16)
, обычно бесполезный, если код правильный, но результат:
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -g -pedantic -Wextra h.c
h.c: In function ‘hexConversion’:
h.c:23:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < sizeof(hex_buffer); i++){
^
pi@raspberrypi:/tmp $ ./a.out
00000002000000?F0??????F???????F000000000??????F
, поэтому в вашем решении вы не пишете по некоторым индексам из-за ошибки в вашем коде
Один из способов сделать это:
void hexConversion(int num){
char hex_buffer[9];
for(size_t i = 0; i < sizeof(hex_buffer) -1; i++){
int temp = (num >> (28-4*i)) & 0xf;
if(temp < 10){
hex_buffer[i] = temp + '0';
}
else {
hex_buffer[i] = temp - 10 + 'A';
}
}
hex_buffer[8] = 0;
puts(hex_buffer);
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -g -pedantic -Wextra h.c
pi@raspberrypi:/tmp $ ./a.out
00000002
000000FF
FFFFFFFF
7FFFFFFF
80000000
DEADBEEF
Обратите внимание, что ваш код предполагает, что int на 32b не зависит от размера (но предположим, что char на 8 битах): [1115 ]
void hexConversion(int num){
char hex_buffer[sizeof(int)*2 + 1];
for(size_t i = 0; i < sizeof(int)*2; i++){
int temp = (num >> (sizeof(int)*8-4-4*i)) & 0xf;
if(temp < 10){
hex_buffer[i] = temp + '0';
}
else {
hex_buffer[i] = temp - 10 + 'A';
}
}
hex_buffer[sizeof(int)*2] = 0;
puts(hex_buffer);
}