【发布时间】:2011-11-12 19:58:19
【问题描述】:
我尝试将数字从 9140 之类的数字转换为 char 字节数组,我终于做到了,但由于某种原因,其中一个数字转换错误。
这个想法是将每个数字分开并将其转换为字节 [4] 并将其保存为一个全局字节数组,这意味着数组每 4 个位置都有一个数字,我将每个数字插入到数组的末尾,最后 i在数组末尾插入位数。
问题是随机出现的一些值,例如值 25 它可以工作,但对于 9140 它返回我 9040,这可能是问题所在?这是代码:
void convertCantToByteArray4Digits(unsigned char *bufferDigits,int cant){
//char bufferDigits[32];
int bufferPos=20;
double cantAux=cant;
int digit=0,cantDigits=0;
double subdigit=0;
while(cantAux > 0){
cout<<"VUELTA"<<endl;
cantAux/=10;
cout<<"cantAux/=10:"<<cantAux<<endl;
cout<<"floor"<<floor(cantAux)<<endl;
subdigit=cantAux-floor(cantAux);
cout<<"subdigit"<<subdigit<<endl;
digit=static_cast<int>(subdigit*10);
cout<<"digit:"<<subdigit*10<<endl;
cantAux=cantAux-subdigit;
cout<<"cantAux=cantAux-subdigit:"<<cantAux<<endl;
bufferDigits[bufferPos-4] = (digit >> 24) & 0xFF;
std::cout<<static_cast<int>(bufferDigits[bufferPos-4])<<std::endl;
bufferDigits[bufferPos-3] = (digit >> 16) & 0xFF;
std::cout<<static_cast<int>(bufferDigits[bufferPos-3])<<std::endl;
bufferDigits[bufferPos-2] = (digit >> 8) & 0xFF;
std::cout<<static_cast<int>(bufferDigits[bufferPos-2])<<std::endl;
bufferDigits[bufferPos-1] = (digit) & 0xFF;
std::cout<<static_cast<int>(bufferDigits[bufferPos-1])<<std::endl;
/*bufferDigits[0] = digit >> 24;
std::cout<<bufferDigits[0]<<std::endl;
bufferDigits[1] = digit >> 16;
bufferDigits[2] = digit >> 8;
bufferDigits[3] = digit;*/
bufferPos-=4;
cantDigits++;
}
cout<<"sizeof"<<sizeof(bufferDigits)<<endl;
cout<<"cantDigits"<<cantDigits<<endl;
bufferPos=24;
bufferDigits[bufferPos-4] = (cantDigits) >> 24;
//std::cout<<bufferDigits[bufferPos-4]<<std::endl;
bufferDigits[bufferPos-3] = (cantDigits) >> 16;
bufferDigits[bufferPos-2] = (cantDigits) >> 8;
bufferDigits[bufferPos-1] = (cantDigits);
}
bufferDigits 的大小为 24 字节,cant 参数是要转换的数字,我收到有关我的代码的任何问题。
【问题讨论】:
-
I did it,然后是but the result is wrong。好矛盾 -
您正在混合十进制和二进制数的移位/除法。与样本
9140匹配的 char[] 数组是什么? -
jaja @sehe 是的,当我写这篇文章时我很困惑:P,当我说“我做到了”时,我可以将数字转换为字节,当我说“但结果错误”时是某些数字转换错误的时候:P
-
当我转换 9140 的每个数字时,char 数组中的输出是:(0,0,0,9)(for 9),(0,0,0,0)(for 1 ? ), (0,0,0,4)(for 4) 和 (0,0,0,0)(for 0) 所以我将每组 4 个字节从右到左写入 char 数组(...一些空字节...0,0,0,9,0,0,0,0,0,0,0,4,0,0,0,0,...字节数)。
-
@DiegoFernandoMurilloValenci,您尝试过我的解决方案吗?
标签: c++ byte bytebuffer