[英]How to save hexadecimal ASCII values to array (buffer) in C?
我在輸入中有一個int值,我想將其保存為ASCII的十六進制表示形式的緩沖區/數組。 我知道如何以十六進制格式打印它,但是如何將其保存到緩沖區中呢?
這是我寫的代碼:
int a = 98765;
char buffer[20];
m = sprintf(buffer, "%d", a);
printf("ASCII value in hex: ");
for(int i=0; buffer[i]!='\0'; i++)
{
printf("%02X", buffer[i]);
}
例如如果a = 123我想得到313233
第一個sprintf
為您提供了一個char數組,其中每個char的范圍都是0x30到0x39。 您希望將它們擴展為兩個字符“ 3”和“ 0”,“ 3”和“ 1”等。
您正在將源中的每個字符擴展為輸出中的兩個字符,這意味着您不能將相同的目標緩沖區用作源緩沖區-您在處理它們之前會覆蓋源緩沖區中的值。 如果需要將結果放入buffer
則可能需要將第一個sprintf
放入一個單獨的char數組中。 在你的循環中,改變printf
到sprintf
到索引buffer
,由兩個每個循環遞增索引。 (因為這是兩個原因,所以您將用第二個迭代的sprintf
輸出覆蓋第一個迭代的字符串終止符,其中將包括一個新的字符串終止符。循環的最后一個迭代中的sprintf
將為您終止字符串。)
您沒有提到應該處理的最長輸入,也沒有提及選擇數組長度的原因。 如果您接受對於緩沖區來說太長的輸入,這里就有緩沖區溢出的危險(並且不要忘記考慮最后一個字符之后的空終止的空間。)
您已經使用sprintf
將十進制值表示為字符串。 您可以對十六進制格式執行相同的操作。
使用sprintf()
的返回值(即“已打印”的字符數)將索引前進到緩沖區中,作為下一個十六進制對的目標,然后迭代十進制buffer
中的每個字符。
請注意,您可以使用第一個sprintf()
的返回值( m
sprintf()
進行迭代,而不是測試nul。
char hexbuffer[64];
int index = 0 ;
for(int i = 0; i < m; i++)
{
index += sprintf( &hexbuffer[index], "%02X", buffer[i] ) ;
}
當然,如果輸入僅包含十進制數字(即用戶未輸入導致在buffer[0]
處出現-
的負值buffer[0]
,則只需在每個十進制數字前插入3
即可,因此:
char hexbuffer[64];
for(int i = 0; i < m; i++)
{
bexbuffer[i * 2] = '3' ;
hexbuffer[i * 2 + 1] = buffer[i]
}
如果只有小數位數的用意,你應該改變的類型, a
以unsigned
,並使用%u
格式說明為十進制輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.