首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言整數轉字串完整實作指南

     編輯:關於C語言

前言

在 C 語言開發中,將整數轉換為字串是常見需求。標準庫雖提供 sprintf 等函式,但理解底層實作有助於掌握進制轉換、記憶體管理與指標操作等核心概念。本文將深入解析一個支援 2~36 進制的通用整數轉字串函式 digitToAlpha。

函式介面設計

char *digitToAlpha(int val, char *buf, unsigned radix);

參數說明:

  • val:待轉換的整數(可為負數)
  • buf:呼叫端提供的字元緩衝區,用於存放結果字串
  • radix:目標進制(2~36),10 進制直接轉換,其他進制先轉為對應進制數值再生成字串

回傳值:指向 buf 的指標,方便鏈式呼叫。

核心演算法邏輯

1. 負數處理

若 val < 0,先在緩衝區寫入 '-',再將 val 轉為無號長整數的正值處理,避免 INT_MIN 取反溢位。

2. 逐位提取與字元轉換

採用「除基取餘」法,從最低位開始提取數字:

  • 餘數 digval = val % radix
  • digval < 10 → '0' + digval;digval >= 10 → 'a' + (digval - 10)
  • 字元按「低位在前」順序寫入緩衝區

3. 字串反轉

因提取順序為反序,需將有效字元區段原地反轉,最後補上 '\0' 結尾。

完整程式碼實作

#include <stdio.h>
#include <stdlib.h>

char *digitToAlpha(int val, char *buf, unsigned radix) {
    char *p = buf;
    char *firstdig = p;
    char temp;
    unsigned digval;

    /* 負數處理 */
    if (val < 0) {
        *p++ = '-';
        val = (unsigned long)(-(long)val);
    }
    firstdig = p;  /* 記錄第一個數字位置 */

    /* 逐位提取(低位在前) */
    do {
        digval = (unsigned)(val % radix);
        val /= radix;
        if (digval > 9)
            *p++ = (char)(digval - 10 + 'a');
        else
            *p++ = (char)(digval + '0');
    } while (val > 0);

    /* 反轉字串 */
    *p-- = '\0';
    do {
        temp = *p;
        *p = *firstdig;
        *firstdig = temp;
        --p;
        ++firstdig;
    } while (firstdig < p);

    return buf;
}

int main(void) {
    int iNum = 55;
    char strNum[10] = "";
    digitToAlpha(iNum, strNum, 10);
    printf("%s\n", strNum);  /* 輸出: 55 */
    return 0;
}

關鍵技術細節

技術點說明
無號轉換用 (unsigned long)(-(long)val) 避免 INT_MIN 絕對值溢位
進制支援2~36 進制統一處理,10 進制為特例
原地反轉雙指標交換,空間複雜度 O(1)
緩衝區安全呼叫端負責分配足夠空間(建議 ≥ 34 字元含結尾)

常見陷阱與最佳實務

  • 緩衝區太小:32 位整數最多 33 字元(含負號),建議預留 64 字元
  • 基數驗證:實際專案應加入 if (radix < 2 || radix > 36) return NULL;
  • 執行緒安全:函式本身無靜態資料,若緩衝區為區域變數則安全
  • 替代方案:C99 snprintf(buf, n, "%d", val) 更標準、安全

總結

digitToAlpha 展示了 C 語言處理進制轉換、指標運算與字串操作的經典技巧。雖然現代開發多直接使用標準庫,但理解其內部機制對嵌入式開發、底層庫實作與面試題目皆有實際幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved