C:将uint8数组转换为包含其字节的十六进制表示的字符串

时间:2017-03-21 22:19:16

标签: c arrays string

我有一个uint8数组:

int i = 0;
uint8_t x[32];

for (i = 0; i < 32; i++) {
    x[i] = i*i;
    printf("x[%d]: %02X\n", i, x[i]);
}

以下是数组的内容:

x[0]: 0 00
x[1]: 1 01
x[2]: 4 04
...
x[14]: 196 C4
x[15]: 225 E1
...etc

我想将x数组转换为char数组,该数组相当于x中存储的字节数组的完整字符串表示形式,即:

00010409101924314051647990A9C4E10021446990B9E4114071A4D9104984C1

基本上,我想做编程等同于

char hex[64] = "00010409101924314051647990A9C4E10021446990B9E4114071A4D9104984C1"

如何用C编程语言完成?

2 个答案:

答案 0 :(得分:2)

您可以使用sprintf并将&hex[2*i]传递给打印位置:

char hex[65];
for (int i = 0 ; i != 32 ; i++) {
    sprintf(&hex[2*i], "%02X", x[i]);
}
hex[64] = '\0';

由于您知道每个sprintf只会使用两个位置,因此您可以确保32个sprintf来电将填充hex[64]中的所有64个字符。

注意:您的示例尝试在hex[64]中存储65个字符。第65个来自字符串文字的空终止符。

答案 1 :(得分:1)

首先创建一个将半字节(4位)转换为十六进制字符的函数,例如

Dim strCmd As String
Dim strBatchFile As String
Dim fso As Object
Dim Fileout As Object

Set fso = CreateObject("Scripting.FileSystemObject")

strBatchFile = "C:\Test\FTP_Test.bat"

Fileout = fso.CreateTextFile(strBatchFile, True, True)
    strCmd = <<command 1>> & vbCrLf
    strCmd = strCmd & <<command 2>>
Fileout.Write strCmd

Fileout.Close

Shell strBatchFile

End Sub

然后创建一个足够大的数组来保存结果(nul终结符需要一个额外的字符,每4位调用一次to_hex函数。

char to_hex(uint8_t nibble)
{
   static const char hex[] = "0123456789ABCDEF";
   return hex[nibble];
}