나는이어떻게 부호
'W' = 57h = 0101_0111
ABh = 1010_1011
처럼 홀수 비트 인덱스 사이에도 인덱스의 비트를 대체 C를, encode_char_in 위해 노력하고 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'를 선언했기 때문에 그는 알고있는 것 같습니다. 그래서 코드는'codeBinPair'에 대한 인자의 타입으로'unsigned char'을 사용해야합니다. – Barmar
'void main()'은 유효하지 않은 서명이며 정의되지 않은 동작을 호출합니다. 그런 다음 자신의 boolen 상수/형식을 정의하지 말고 표준 형식을 사용하십시오! 마지막으로 코드에서 정의되지 않은 동작을 호출하거나 일부 시프트 및 특정 값에 대한 구현 정의 동작을 사용합니다. – Olaf