2010-06-03 4 views
4

왜 Asc() 함수가 잘못된 결과를 반환하는지 말할 수 있습니까? VB 함수의 실수?

Dim TestChar = Chr(128) 
    Dim CharInt = Asc(TestChar) ' this is a mistake on Windows 7 x64. Asc(TestChar) returns 136 instead of 128 

나는 다른 컴퓨터에서이 코드를 실행하고, 결과는 128

감사했다.

답변

12

컴퓨터가 다른 기본 코드 페이지를 사용 중입니다.

Asc 함수는 시스템의 현재 ANSI 코드 페이지를 사용합니다.
함수는 단순히 값을 char으로 변환합니다. (> 255을 제외하고)

+0

.NET이 일반적으로 항상 유니 코드를 사용하기 때문에 이것이 원인인지 확실하지 않습니다. 이것이 약간의 지체가 아니라면 그들은 물론 VB6에서 이월했습니다. * VB.NET이 존재하지 않는 또 다른 좋은 이유가 될 것입니다. * –

+1

@Matti : 예, VB6입니다. – SLaks

+0

분명히 이것이 전체적인 이야기가 될 수는 없습니까? 'Asc'는 현재의 ANSI 코드 페이지를 사용하지만'Chr'도 마찬가지입니다 : ANSI 코드 포인트 번호를 문자로 변환합니다 (이것은 * 캐스트 *가 아닌 * 변환이라고 부름). 그래서 나는 Asc (Chr (X))가 항상 X를 반환 할 것이라고 믿는다. 나는 알렉산더의 코드 조각을 중국어 코드 페이지로 시험해 보았고,'Asc (TestChar)'는 128이다. 실제로 알렉산더는 하나의 코드 페이지와 다른 코드 페이지를 가진'Asc'를 실행했다. ? – MarkJ

2

Visual Studio 2010을 사용하여 Windows 7 x64에서이 정확한 코드를 시도하고 128의 예상 값을 얻었습니다. 혼합 옵션 (Infer, explicit, etc ...)을 시도했는데 값이 남아 있습니다. 같은. 이 문제를 추적하는 데 도움이되는 몇 가지 세부 정보를 제공 할 수 있습니까?

Sub Main() 
    Dim TestChar = Chr(128) 
    Dim CharInt = Asc(TestChar) 
    Console.WriteLine(CharInt) 
    Stop 
End Sub 
1

다른 기본 코드 페이지를 사용하는 것이 문제였습니다. 나는 그것을 영어로 바꿨고 코드는 잘 동작한다. 감사합니다.

관련 문제