簡體   English   中英

C中的增量字符數組

[英]Increment char array in C

我得到了一個像這樣的字符數組:

uchar myBytes[4] = { 0x01, 0x23, 0x45, 0xFF };

增加最后一個元素的最簡單/最好的方法是什么,將進位傳播到更早的元素? 我的結果應該是

0x01, 0x23, 0x46, 0x00

您可以從數組末尾開始遞增字節,並將新值與舊值進行比較。 如果它較小,則意味着(整數)和的轉換已折疊到 UCHAR_MAX 上。

這是一個可能的代碼:

#include <stdio.h>

int main()
{
    unsigned char myBytes[4] = { 0x01, 0x23, 0x45, 0xFF };
    for (int i = 3; i >= 0; i--) {
        // mBytes[i] is promoted to int and the sum is converted to unsigned char
        unsigned char newer = 1 + myBytes[i];
        if (myBytes[i] < newer) break;         // stop at first non overflow
        myBytes[i] = newer;
    }
    for (int i = 0; i < 4; i++) {
        printf("0x%02x ", myBytes[i]);
    }
    printf("\n");
    return 0;
}

它按預期提供:

0x01 0x23 0x46 0x00

來自 6.3.1.3 有符號和無符號整數 [轉換] 草案 n1570 的參考(強調我的)

1 當一個整數類型的值轉換為_Bool以外的另一個整數類型時,如果該值可以用新類型表示,則不變。
2 否則,如果新類型是無符號的,則通過重復加或減一個新類型可以表示的最大值來轉換該值,直到該值在新類型的范圍內

for (int i = 3; i >= 0; i--) if (++myBytes[i]) break;

這是我能想到的最簡單的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM