我想encode_char_inç用來取代奇數位指數之間甚至指數位,這樣我怎麼能做出符號的字符像無符號
'W' = 57h = 0101_0111
ABh = 1010_1011
因爲char
在C C函數可能成爲負數,我不能在位之間切換(僅在signed char
- 它的工作原理)。 它在下面的代碼中給了我另一個值 。
#include <stdio.h>
#include <limits.h>
#define TRUE 1
#define ONE 1
char codeBinPair(char str);
void main()
{
char str[2] = { 182,NULL };
unsigned char ch = 'W';
printf("ch = %x\n", ch);
ch = codeBinPair(ch);
printf("ch = %x\n", ch);
ch = codeBinPair(ch);
printf("ch = %x\n", ch);
}
char codeBinPair(char str)
{
int idx = 0;
char ch1 = str, ch2 = 0, mask = ONE;
while (TRUE)
{
mask <<= ONE;
mask &= ch1;
mask >>= ONE;
ch2 |= mask;
// Initialize the mask
mask = ONE;
mask <<= idx;
mask &= ch1;
mask <<= ONE;
ch2 |= mask;
// Index next loop we want to replace
idx += 2;
// If We Finish whole Byte
if (idx == CHAR_BIT)
return ch2;
// Initialize the mask
mask = ONE;
mask <<= idx;
}
}
C已簽署'和char''無符號char',你知道的。如果你在乎做點數學,那就用其中之一。 (或者,甚至更好的是,'int_least8_t'和'uint_least8_t'。) – cHao
@cHao他似乎知道,因爲他宣稱'unsigned char ch ='W''。所以代碼只需要使用'unsigned char'作爲'codeBinPair'參數的類型。 – Barmar
'void main()'是一個無效簽名,並調用未定義的行爲。那麼不要定義你自己的boolen常量/類型,而是使用標準的!最後,你的代碼可能會調用未定義的行爲,或者依賴於某些移位和某些值的實現定義的行爲。 – Olaf