在 C 中向 UUEncoder 添加空填充
Posted
技术标签:
【中文标题】在 C 中向 UUEncoder 添加空填充【英文标题】:Adding Null Padding to UUEncoder in C 【发布时间】:2015-01-31 10:11:23 【问题描述】:我知道我即将完成这个 UUEncoder 函数;我将使用它与嵌入式设备进行通信。但是对于我的生活,我无法弄清楚如何在最后正确插入空填充字符。
我一直在尝试效仿here 的示例。
void encode(unsigned char fileData_Hex_String[], int hexDataCharCount)
unsigned char UUE_Encoded_String[MAX_SIZE];
unsigned char b[2];
unsigned char d[3];
int UUE_Encoded_String_Index = 0;
hexDataCharCount =7;
for(int hexDataIndex = 0; hexDataIndex < hexDataCharCount; hexDataIndex)
// Load chars or nulls
for (int i = 0; i < 3; ++i)
b[i] = fileData_Hex_String[hexDataIndex];
printf("%i\n", (hexDataIndex - hexDataCharCount));
if ((hexDataIndex - hexDataCharCount) > 0)
b[1] = '\n';
b[2] = '\n';
break;
hexDataIndex++;
// UUEncode
d[0] = (((b[0] >> 2) & 0x3f) + ' ');
d[1] = ((((b[0] << 4) | ((b[1] >> 4) & 0x0f)) & 0x3f) + ' ');
d[2] = ((((b[1] << 2) | ((b[2] >> 6) & 0x03)) & 0x3f) + ' ');
d[3] = ((b[2] & 0x3f) + ' ');
// Put the UUEncoded chars into their own string.
for (int i = 0; i < 4; i++)
UUE_Encoded_String[UUE_Encoded_String_Index] = d[i];
printf(" 0x%2x \n", UUE_Encoded_String[UUE_Encoded_String_Index]);
UUE_Encoded_String_Index++;
一切正常,除了最后 0x48 和 0x2A 有两个不需要的字符。
【问题讨论】:
【参考方案1】:您的数组太小。你已经声明了
unsigned char b[2];
unsigned char d[3];
但索引都超出范围
d[3] = ((b[2] & 0x3f) + ' ');
所以你应该声明
unsigned char b[3];
unsigned char d[4];
【讨论】:
不确定我是否关注。 b[2] 用于十六进制值,d[3] 用于 UEE 值。 4 个 UUE 需要 3 个十六进制字符。unsigned char b[2]
可以索引为b[0]
或b[1]
,但b[2]
超出范围,因为unsigned char b[2]
只有2 个元素。
啊。是的,谢谢你。这将在以后避免我的心痛,但它仍然不能解决空填充的问题。【参考方案2】:
\n
不是 null
它是换行符。如果你把
b[1] = 0;
b[2] = 0;
最后两个字节是0x20 0x20
。但是如果你这样写循环,你的代码会更灵活
// Load chars or nulls
for (i = 0; i < 3; ++i)
if (hexDataIndex < hexDataCharCount)
b[i] = fileData_Hex_String[hexDataIndex];
else
b[i] = 0;
hexDataIndex++;
【讨论】:
谢谢你,我知道那些是愚蠢的错误。只是变得痴迷和睡眼惺忪。完美运行。【参考方案3】:Weather Vane 帮助我之后的工作代码。
void encode2(unsigned char fileData_Hex_String[], int hexDataCharCount)
unsigned char UUE_Encoded_String[MAX_SIZE];
unsigned char b[3];
unsigned char d[4];
int paddedIndex = 0;
int UUE_Encoded_String_Index = 0;
for(int hexDataIndex = 0; hexDataIndex < hexDataCharCount; hexDataIndex)
// Load chars or nulls
for (int i = 0; i < 3; i++)
if (hexDataIndex < hexDataCharCount)
b[i] = fileData_Hex_String[hexDataIndex];
else
b[i] = 0;
paddedIndex++;
//printf("%i\n", (hexDataIndex-hexDataCharCount));
hexDataIndex++;
// UUEncode
d[0] = (((b[0] >> 2) & 0x3f) + ' ');
d[1] = ((((b[0] << 4) | ((b[1] >> 4) & 0x0f)) & 0x3f) + ' ');
d[2] = ((((b[1] << 2) | ((b[2] >> 6) & 0x03)) & 0x3f) + ' ');
d[3] = ((b[2] & 0x3f) + ' ');
// Put the UUEncoded chars into their own string.
for (int i = 0; i < 4; i++)
UUE_Encoded_String[UUE_Encoded_String_Index] = d[i];
UUE_Encoded_String_Index++;
//printf(" %i %i\n", hexDataIndex, hexDataCharCount);
printf("%i\n", (UUE_Encoded_String_Index-paddedIndex));
for (int i = 0; i < (UUE_Encoded_String_Index-paddedIndex); ++i)
printf(" 0x%2x \n", UUE_Encoded_String[i]);
【讨论】:
以上是关于在 C 中向 UUEncoder 添加空填充的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIStackView IOS 中向 UILabel 添加前导填充
在 SwiftUI 中向 TextField/SecureField 添加图像,向占位符文本添加填充