我有一個1000字節的字符數組。我想將它轉換爲int數組,使char數組的四個元素(每個字節)等於int數組中的一個元素(每個字節)。四個1字節字符到一個4字節int?
e.g.:
char_array[0] = '0'
char_array[1] = '9'
char_array[2] = '2'
char_array[3] = '8'
it should be converted to
int_array[0] = 928 or 0928.
我應該怎麼做?
我有一個1000字節的字符數組。我想將它轉換爲int數組,使char數組的四個元素(每個字節)等於int數組中的一個元素(每個字節)。四個1字節字符到一個4字節int?
e.g.:
char_array[0] = '0'
char_array[1] = '9'
char_array[2] = '2'
char_array[3] = '8'
it should be converted to
int_array[0] = 928 or 0928.
我應該怎麼做?
嘗試下面的代碼:
#include<iostream>
#include<cstring>
using namespace std;
#define CHAR_ARRAY_SIZE 8
int main()
{
char charArray[CHAR_ARRAY_SIZE] = {'1', '2', '3', '4', '5', '6', '7', '8'};
int intArray[2];
for(int i = 0; i < CHAR_ARRAY_SIZE/4; i++) {
char ch1 = (charArray[4*i+0] - '0');
char ch2 = (charArray[4*i+1] - '0');
char ch3 = (charArray[4*i+2] - '0');
char ch4 = (charArray[4*i+3] - '0');
intArray[i] = ch1*1000 + ch2*100 + ch3*10 + ch4;
}
cout << "intArray[0] : " << intArray[0] << endl;
cout << "intArray[1] : " << intArray[1] << endl;
return 0;
}
如果所有的字符部件均在數組中連續的,那麼很簡單幹脆先拿ADRESS爲int *像這樣:
char_array[0] = '0'
char_array[1] = '9'
char_array[2] = '2'
char_array[3] = '8'
int * char_array_to_int = (int *)char_array;
那麼* char_array_to_int包含您需要的值。
否則,您可以使用位移來填充所需的4個字節的整數。
EDIT
遺憾錯過炭陣列上的報價。
那麼是的,你需要從註釋中指出的數字的ascii表示改變爲數字本身。
你的答案不起作用,你不能將char轉換爲這樣的數字。結果取決於您的字節順序 – Stargateur
無論如何,這會調用未定義的行爲。 – Olaf
爲什麼不使用sscanf
將您的數組轉換爲int值。如果你想有4個字節char
數組轉換成再一個int
只需將陣列分成4個字節的塊並掃描他們一個接一個,像這樣:
#include <stdio.h>
#include <string.h>
int main()
{
char char_array[8] = {'0', '9', '2', '8', '1', '2', '3', '4'};
int array_size = sizeof(char_array)/sizeof(char_array[0]);
int sizeof_int = sizeof(int);
int int_array[array_size/sizeof_int];
char buf[sizeof_int + 1];
for (int i = 0; i < array_size; i += sizeof_int)
{
memcpy(buf, char_array + i, sizeof_int);
buf[sizeof_int] = '\0';
int val = 0;
if (sscanf(buf, "%d", &val) == -1)
return -1; // return in case scanf returns an error
int_array[i/sizeof_int] = val;
}
for (int i = 0; i < array_size/sizeof_int; i++)
printf("%d\n", int_array[i]);
}
這將產生
928
1234
作爲輸出。
哦順便說一句,因爲你使用的是C風格的陣列,我假設你也想要一個C的解決方案。否則,我會建議使用vector
而不是數組。
您可以使用strncpy
僅在一個臨時字符數組中複製4個字符,然後通過atoi
將其轉換爲整數。
char tmp[5];
tmp[4] = '\0';
for (int i=0; i<250; i++)
{
strncpy (tmp, &char_array[i*4], 4);
int_array[i] = atoi (tmp);
}
對於數組中的每個字符,數字添加到我們正在構建的價值。 (我們事先乘以10來調整數字)。
每4位數字,加入整數數組並重置該值。
int value = 0;
for (i = 0; i < 1000; i++){
value *= 10;
value += char_array[i] - '0'
if(i % 4 == 3){
int_array[i/4] = value;
value = 0;
}
}
注意,如果CHAR_ARRAY包含比數字0-9其他字符,但這是任何簡單的檢查,以補充這是不行的。
是否要將字符轉換爲數字或字節爲整數?你的示例代碼提示前者,你的第一段到後者。也許你只需要'atoi'? –
許多答案可能。你可以把更具體的代碼? – Stargateur
'n = 1000 * 0 + 100 * 9 + 2 * 10 + 1 * 8':顯示您嘗試過的。 –