格式化和写入数据
Formatting and writing data
我将简要解释情况并转到问题。
我有应用程序,可以将一些数据写入/读取到设备(卡)。下面是一些示例代码。
首先,用户输入十六进制字符串,说"00000000000000000000AABBEEAABBEE
"(这应该是16个字节)。
现在要将此数据写入卡,它正在转换为字节数组。
for(int i=0,m=0; i < size; i+=2,m++)
{
char ch1, ch2;
ch1=(char)str[i]; // str is hex string
ch2=(char)str[i+1];
int dig1, dig2;
if(isdigit(ch1)) dig1 = ch1 - '0';
else if(ch1>='A' && ch1<='F') dig1 = ch1 - 'A' + 10;
else if(ch1>='a' && ch1<='f') dig1 = ch1 - 'a' + 10;
if(isdigit(ch2)) dig2 = ch2 - '0';
else if(ch2>='A' && ch2<='F') dig2 = ch2 - 'A' + 10;
else if(ch2>='a' && ch2<='f') dig2 = ch2 - 'a' + 10;
array1[m] = (char)(dig1*16 + dig2); // output byte array
}
现在,这个字节数组被发送到设备,就像这样:
unsigned char sendBuff[16];
for(int i=0;i<16;i++)
sendBuff[i]=array1[i];
并调用发送命令,说Send(sendBuff, 16)
;
读取也很容易,我们称之为Receive(receiveBuffer);
现在receiveBuffer
包含我们存储的字节数组。我们将其转换回十六进制:
for(k=0;k<16;k++)
{
data[k*2]=hexval[((receiveBuffer[k]>>4)&0xF)];
data[(k*2)+1]=hexval[receiveBuffer[k]&0x0F];
}
现在data
包含:"00000000000000000000AABBEEAABBEE
上次我问类似的问题时,人们对使用的字节格式、字节序等提出了怀疑/兴趣。我的问题是你能说出上面使用了什么字节序吗?还是某种固定格式?我应该期待一些字节序问题吗?
实际的
十六进制数字以大端序的方式解释,但代码看起来像是字节序无关的,并且无论计算机的字节序如何,都应该可以工作。
相关文章:
- 将从格式化文本文件读取的文本数据存储到链表
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 使用 std::locale 格式化法语数字时无效的 UTF-8 数据
- 二进制模式 + 格式化文本操作或文本模式 + 二进制数据操作 - 有意义吗?
- 用C++读取带多个分隔符的格式化数据
- 使用c++只读取已格式化和未格式化数据的文件中的已格式化数据
- 正确格式化I2C的数据(Wire.write)
- 已知格式化文件中的数据排列
- 我可以告诉解决方案如何使用 C 写入此格式化数据
- C++ read() 返回未格式化的二进制数据
- 使用C++或任何windows脚本语言格式化文本数据
- 格式化和写入数据
- std::getline()从流中读取格式化的输入后读取错误的数据
- 用C++将格式化的数值数据读取到数组中
- 将格式化数据转换为结构的方便方法
- 无法格式化PWSTR变量中的数据以用于CopyFileW命令
- 格式化读取文件数据的c++
- 比较包含格式化数据的字符串
- 在c++中读取格式化数据的最简单/最清晰的方法
- 使用 ifstream 提取运算符C++>>从文件中读取格式化数据