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