char string[100] = "000000000000000000010000000000" 這是我擁有的資料,資料是 4 個單獨的 8 位,即當我們拆分 string[100] 時我們得到的資料,00000000 00000000 000000 任何人都可以將它轉換為 00000001值使用C語言?
對于上述字串,在將其轉換為十六進制后,我們需要得到“00 00 04 00”,因此類似地基于輸入,我需要獲得所需的輸出。
uj5u.com熱心網友回復:
無需重新發明輪子,只需使用strtol.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char string[100] = "000000000000000000010000000000";
printf("%.8lx\n", strtol(string,0,2));
}
您需要將其分組為位元組,中間有空格:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void)
{
char string[100] = "000000000000000000010000000000";
char byte_str[100];
sprintf(byte_str, "%.8lx\n", strtol(string,0,2));
for(size_t i=0; i<strlen(byte_str); i =2)
{
printf("%c%c ", byte_str[i], byte_str[i 1]);
}
}
這可能不是最有效的代碼,但實際上我花了幾分鐘來撰寫。
uj5u.com熱心網友回復:
如果是學習如何在沒有花哨的庫函式的情況下將數字轉換和拆分為位元組的練習:
unsigned convert(const char * restrict str)
{
unsigned result = 0;
while(*str)
{
result *= 2;
result = *str == '1';
}
return result;
}
#define MASK ((1 << CHAR_BIT) - 1)
#define GETBYTE(val, index) (((val) >> ((sizeof(val) - (index) - 1) * CHAR_BIT)) & MASK)
void print(const unsigned val)
{
for(int index = 0; index < sizeof(val); index )
{
printf("x%c", GETBYTE(val, index), (index == sizeof(val) - 1) ? '\n' : ' ');
}
}
int main (void)
{
char string[100] = "000000000000000000010000000000";
unsigned val = convert(string);
printf("0xx\n", val);
print(val);
}
https://gcc.godbolt.org/z/18G7r37TW
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388737.html
下一篇:為串列的每個條目添加引號
