1

私のアプリケーションでは、長い長い数値を 8 バイト配列に変換する必要があります。次に、8 バイト配列を 16 進数文字列に変換する必要があります。これで私を助けてくれませんか。私は興奮しています。

4

2 に答える 2

3

整数/バイト配列変換を行う 1 つの方法は、次を使用することunionです。

union {
    long long l;
    uint8_t b[sizeof(long long)];
} u;

u.l = mylonglong;

次にu.b[]、個別にアクセスできるバイトが含まれます。

編集: @NikolaiRuhe で指摘されているように、この使用はunion未定義の動作につながる可能性があるため、memcpy()代わりに使用することをお勧めします。

uint8_t b[sizeof(long long)];
memcpy(b, &mylonglong, sizeof(b));

long longネイティブ エンディアン順の 16 進文字列が必要な場合は、次のようにします。

void hexChar(uint8_t b, char *out)
{
    static const char *chars = "0123456789abcdef";
    out[0] = chars[(b >> 4) & 0xf];
    out[1] = chars[b & 0xf];
}

// Make sure outbuf is big enough
void hexChars(const uint8_t *buffer, size_t len, char *outbuf)
{
    for (size_t i = 0; i < len; i++)
    {
        hexChar(buffer[i], outbuf);
        outbuf += 2;
    }
    *outbuf = '\0';
}

そしてそれを呼び出す:

char hex[32];
hexChars(u.b, sizeof(u.b), hex);

ただし、代わりに の 16 進値が必要な場合long long:

char hex[32];
sprintf(hex, "%llx", mylonglong);
于 2013-05-31T12:15:59.087 に答える