[英]How do I print char types from an array in c?
int remainder;
char Hex[8];
int quotient, power;
remainder = (original_value*-1)-1;
for (int k = len; k > 0 ; k--)
{
if (sign == 1)
{
power = pow(16, k-1);
quotient = 15 - (remainder/power);
remainder = remainder%power;
if (quotient < 10)
Hex[len - k] = (int)quotient;
else if (quotient == 10)
Hex[len - k] = 'A';
else if (quotient == 11)
Hex[len - k] = 'B';
else if (quotient == 12)
Hex[len - k] = 'C';
else if (quotient == 13)
Hex[len - k] = 'D';
else if (quotient == 14)
Hex[len - k] = 'E';
else if (quotient == 15)
Hex[len - k] = 'F';
}
}
for(int k = 0; k < len; k++)
printf("%s", Hex[k]);
我沒有包括其余的代碼,因為這應該可以解釋我要實現的目標。 我的目標是打印出用戶輸入的任何數字的Base 16表示形式,但是我需要將此數據保存到數組中以備后用,如何在char數組中打印數據(最后兩行) ,以使字符像在我的for循環中一樣顯示?
嘗試這個希望這將工作並享受
printf("%s", Hex[k]); ==> printf("%c", Hex[k]);
而pow提升2的冪實際上是次優的。 您應該使用班次(<<)
一些快速而骯臟的代碼可以做到這一點。
unsigned int somevalue = 3543577;
char hexout[9];
const char *hexchar = "0123456789ABCDEF";
for(int i=7; i>=0; i--, somevalue >>= 4)
hexout[i] = hexchar[somevalue & 0xF];
hexout[8] = 0;
printf("%s\n",hexout);
注意有關sizeof int等的假設。
您正在使它變得比原來困難得多。
pow()
。 由於浮點數的精度有限,它引入了整個工件。 僅對整數類型使用操作。 %s
格式需要一個零終止的字符串( char
數組)。 Hex[k]
是單個字符-這是類型不匹配。 如果格式說明符和相應參數的類型不匹配,則printf()
給出未定義的行為。 如果您確實必須循環執行此操作,則此方法很簡單。 注意,我假設original_value
為正,並且您不需要保留其原始值。
char Hex[9];
const char hex_digits[] = "0123456789ABCDEF";
for (int i = 0; i < 8; ++i)
{
Hex[7-i] = hex_digits[original_value % 16];
original_value /= 16;
}
Hex[8] = '\0';
original_value
為正的假設至關重要,因為取模運算符( original_value % 16
)將產生一個介於0
和15
之間的值(包括0
和15
,並且整數除法( original_value /= 16
)會四舍五入為零。
這將添加前導零,因此值300的輸出字符串將為“ 0000012C”。 我將把它留作練習,以弄清楚如何獲得前導空格而不是前導零。
您也可以使用等效的按位運算來完成上述操作,但我將其保留為練習。 我認為使用基本的數學運算可以更輕松地進行此練習(大多數人,如果被要求用十六進制在紙上寫一些值,則可以進行除法運算和余數運算,而不是一點點擺弄)。
但是,上述操作(即使嘗試循環執行)也是不必要的。 您真正需要做的只是;
char Hex[9];
sprintf(Hex, "%08X", (unsigned)original_value);
如果要空格而不是前導零,請從格式字符串中刪除0
。
請注意,我已將Hex
的尺寸增加了1
。 這允許sprintf()
附加尾隨零(並防止未定義的行為,因為sprintf()
會提供所提供的數組足夠大以包含該尾隨字符)。 這也將使您可以使用
printf("%s", Hex);
一直打印字符,直到找到結尾的零字節。
如果您不希望數組中的尾隨零字符,顯然您需要調整上面的邏輯。 但是,您還需要避免嘗試將數組打印為字符串(例如,使用%s
格式)。
請記住,您的問題ASSUMES int
是32位類型(例如,對於64位類型,將需要更大的數組)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.